Mål, kobling og synlighet: PUBLIC, PRIVATE
Definer mål, koble biblioteker og bruk synligheten PUBLIC, PRIVATE og INTERFACE korrekt.
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.
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
- CMake-prosjektstruktur og CMakeLists.txt
- Mål, kobling og synlighet: PUBLIC, PRIVATE
- Bruk av vcpkg og Conan for avhengigheter
- Generering av IDE-filer og plattformuavhengige bygg