C++ Academy · Les

Targets, linken en zichtbaarheid: PUBLIC, PRIVATE

Definieer targets, link bibliotheken en gebruik PUBLIC, PRIVATE en INTERFACE-zichtbaarheid correct

Les 2 van 415 stappen

Targets, linken en zichtbaarheid: PUBLIC, PRIVATE is een gratis C++ Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.

Doelen vormen de bouweenheid

Moderne CMake draait om doelen: uitvoerbare bestanden, bibliotheken of sets die alleen een interface bieden. Eigenschappen worden aan doelen gekoppeld en via koppelingen doorgegeven.

Doelen toevoegen

Gebruik add_executable, add_library of add_library(... INTERFACE).

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

target_link_libraries

Koppel een doel aan bibliotheken. Het derde argument bepaalt de zichtbaarheid.

target_link_libraries(myapp PRIVATE mylib)

Zichtbaarheid PUBLIC PRIVATE INTERFACE

Drie zichtbaarheidsniveaus bepalen of afhankelijkheden worden doorgegeven aan gebruikers van dit doel:

  • PRIVATE — gebruikt om dit doel te bouwen; niet zichtbaar
  • INTERFACE — gebruikt door gebruikers; niet door dit doel
  • PUBLIC — beide

Doorgifte visualiseren

Als mylib fmt als PUBLIC koppelt, krijgt elk doel dat mylib koppelt ook de include-mappen van fmt. PRIVATE betekent dat gebruikers fmt niet zien.

target_include_directories

Stel include-mappen per doel in. Gebruik PUBLIC voor headers die gebruikers met #include opnemen en PRIVATE voor interne headers.

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

target_compile_definitions

Stel preprocessormacro's in voor het doel.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Vraag specifieke taalfuncties aan, bijvoorbeeld een C++-standaard.

target_compile_features(mylib PUBLIC cxx_std_20)

Interfacebibliotheken

Een INTERFACE-bibliotheek heeft geen gecompileerde uitvoer. Gebruik deze om compileeropties, headers of koppelingen te bundelen die gebruikers moeten overnemen.

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)

Bibliotheken met alleen headers

Declareer voor bibliotheken met alleen headers een INTERFACE-bibliotheek en stel de include-map in als INTERFACE.

Aliassen

Maak aliassen met naamruimten voor duidelijkere koppelingsopdrachten.

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

Koppelingsvolgorde

CMake bepaalt de koppelingsvolgorde meestal correct. Gebruik voor lastige circulaire gevallen de linkeroptie --start-group of pas de structuur van je bibliotheken aan.

Veelgemaakte fout: globale include_directories

Vermijd de globale opdracht include_directories. Gebruik target_include_directories, zodat headers alleen aan specifieke doelen worden gekoppeld.

Korte controle

Wat betekent target_link_libraries(mylib PUBLIC fmt) voor een doel dat mylib koppelt?

Samenvatting

Moderne CMake gebruikt doelen als werkeenheid. Stel eigenschappen in met target_*-opdrachten en gebruik PUBLIC/PRIVATE/INTERFACE om te bepalen hoe eigenschappen aan gebruikers worden doorgegeven.

Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Targets, linken en zichtbaarheid: PUBLIC, PRIVATE” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “Targets, linken en zichtbaarheid: PUBLIC, PRIVATE”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.

Wat leer ik in “Targets, linken en zichtbaarheid: PUBLIC, PRIVATE”?

Definieer targets, link bibliotheken en gebruik PUBLIC, PRIVATE en INTERFACE-zichtbaarheid correct Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C++ Academy te beginnen?

Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Targets, linken en zichtbaarheid: PUBLIC, PRIVATE”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C++ Academy?

Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Projectindeling met CMake en CMakeLists.txt
  2. Targets, linken en zichtbaarheid: PUBLIC, PRIVATE
  3. vcpkg en Conan gebruiken voor dependencies
  4. IDE-bestanden genereren en multiplatform builds
← Terug naar C++ Academy