Targets, linken en zichtbaarheid: PUBLIC, PRIVATE
Definieer targets, link bibliotheken en gebruik PUBLIC, PRIVATE en INTERFACE-zichtbaarheid correct
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.
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
- Projectindeling met CMake en CMakeLists.txt
- Targets, linken en zichtbaarheid: PUBLIC, PRIVATE
- vcpkg en Conan gebruiken voor dependencies
- IDE-bestanden genereren en multiplatform builds