C++ Academy · leksjon

Mål, kobling og synlighet: PUBLIC, PRIVATE

Definer mål, koble biblioteker og bruk synligheten PUBLIC, PRIVATE og INTERFACE korrekt.

Leksjon 2 av 415 trinn

Mål, kobling og synlighet: PUBLIC, PRIVATE er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Mål er byggeenheten

Moderne CMake er sentrert rundt mål – kjørbare programmer, biblioteker eller sett som bare har et grensesnitt. Egenskaper knyttes til mål og videreføres gjennom kobling.

Legge til mål

Bruk add_executable, add_library eller add_library(... INTERFACE).

add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)

target_link_libraries

Koble et mål til biblioteker. Det tredje argumentet styrer synligheten.

target_link_libraries(myapp PRIVATE mylib)

Synlighet med PUBLIC PRIVATE INTERFACE

Tre synlighetsnivåer – de styrer om avhengigheter videreføres til forbrukerne av dette målet:

  • PRIVATE – brukes til å bygge dette målet, men eksponeres ikke
  • INTERFACE – brukes av forbrukerne, men ikke av dette målet
  • PUBLIC – begge deler

Visualisere videreføring

Hvis mylib kobler til fmt som PUBLIC, får alle mål som kobler til mylib, også inkluderingskatalogene til fmt. PRIVATE betyr at forbrukerne ikke ser fmt.

target_include_directories

Angi inkluderingskataloger per mål. Bruk PUBLIC for headerfiler som forbrukerne skal #include, og PRIVATE for interne headerfiler.

target_include_directories(mylib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)

target_compile_definitions

Angi forhåndsprosessor-makroer for målet.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Be om bestemte språkfunksjoner, for eksempel en C++-standard.

target_compile_features(mylib PUBLIC cxx_std_20)

Grensesnittbiblioteker

Et INTERFACE-bibliotek har ingen kompilert utdata. Bruk det til å samle kompileringsalternativer, headerfiler eller koblinger som forbrukerne skal arve.

add_library(strict_warnings INTERFACE)
target_compile_options(strict_warnings INTERFACE -Wall -Wextra)

# now any target can opt in
target_link_libraries(myapp PRIVATE strict_warnings)

Header-bare biblioteker

For header-bare biblioteker deklarerer du et INTERFACE-bibliotek og angir inkluderingskatalogen som INTERFACE.

Aliaser

Opprett aliaser med navnerom for tydeligere koblingskommandoer.

add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)

Koblingsrekkefølge

CMake løser vanligvis koblingsrekkefølgen riktig. For vanskelige sirkulære tilfeller kan du bruke koblerflagget --start-group eller omstrukturere biblioteksstrukturen.

Vanlig feil: global include_directories

Unngå den globale kommandoen include_directories. Bruk target_include_directories slik at headerfiler bare knyttes til bestemte mål.

Kort sjekk

Hva betyr target_link_libraries(mylib PUBLIC fmt) for et mål som kobler til mylib?

Oppsummering

Moderne CMake bruker mål som arbeidsenhet. Angi egenskaper med target_*-kommandoer, og bruk PUBLIC/PRIVATE/INTERFACE til å styre hvordan egenskaper videreføres til forbrukerne.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Mål, kobling og synlighet: PUBLIC, PRIVATE» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Mål, kobling og synlighet: PUBLIC, PRIVATE», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Mål, kobling og synlighet: PUBLIC, PRIVATE»?

Definer mål, koble biblioteker og bruk synligheten PUBLIC, PRIVATE og INTERFACE korrekt. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Mål, kobling og synlighet: PUBLIC, PRIVATE»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. CMake-prosjektstruktur og CMakeLists.txt
  2. Mål, kobling og synlighet: PUBLIC, PRIVATE
  3. Bruk av vcpkg og Conan for avhengigheter
  4. Generering av IDE-filer og plattformuavhengige bygg
← Tilbake til C++ Academy