Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE
Definieren Sie Targets, verknüpfen Sie Bibliotheken und verwenden Sie die Sichtbarkeit PUBLIC, PRIVATE und INTERFACE korrekt.
Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Targets sind die Baueinheit
Modernes CMake basiert auf Targets – ausführbaren Dateien, Bibliotheken oder rein als Schnittstelle dienenden Sammlungen. Properties werden an Targets angehängt und über die Verknüpfung weitergegeben.
Targets hinzufügen
Verwenden Sie add_executable, add_library oder add_library(... INTERFACE).
add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)target_link_libraries
Verknüpft ein Target mit Bibliotheken. Das dritte Argument steuert die Sichtbarkeit.
target_link_libraries(myapp PRIVATE mylib)PUBLIC PRIVATE INTERFACE: Sichtbarkeit
Es gibt drei Sichtbarkeitsebenen. Sie steuern, ob Abhängigkeiten an Nutzer dieses Targets weitergegeben werden:
- PRIVATE – wird zum Erstellen dieses Targets verwendet, aber nicht offengelegt
- INTERFACE – wird von Nutzern verwendet, nicht von diesem Target
- PUBLIC – beides
Weitergabe visualisieren
Wenn mylib fmt als PUBLIC verknüpft, erhält jedes Target, das mylib verknüpft, ebenfalls die Include-Verzeichnisse von fmt. PRIVATE bedeutet, dass Nutzer fmt nicht sehen.
target_include_directories
Legen Sie Include-Verzeichnisse pro Target fest. Verwenden Sie PUBLIC für Header, die Nutzer mit #include einbinden, und PRIVATE für interne Header.
target_include_directories(mylib
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)target_compile_definitions
Setzen Sie Präprozessor-Makros für das Target.
target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)target_compile_features
Fordern Sie bestimmte Sprachfunktionen an, etwa einen C++-Standard.
target_compile_features(mylib PUBLIC cxx_std_20)Interface-Bibliotheken
Eine INTERFACE-Bibliothek erzeugt keine kompilierten Ausgaben. Verwenden Sie sie, um Compiler-Optionen, Header oder Verknüpfungen zu bündeln, die Nutzer erben sollen.
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-only-Bibliotheken
Für Header-only-Bibliotheken deklarieren Sie eine INTERFACE-Bibliothek und setzen Sie das Include-Verzeichnis auf INTERFACE.
Aliase
Erstellen Sie Aliase mit Namensräumen, damit Verknüpfungsbefehle übersichtlicher werden.
add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)Reihenfolge beim Verknüpfen
CMake löst die Reihenfolge beim Verknüpfen normalerweise korrekt auf. Verwenden Sie bei schwierigen zyklischen Fällen das Linker-Flag --start-group oder strukturieren Sie Ihre Bibliotheken um.
Häufiger Fehler: Globales include_directories
Vermeiden Sie den globalen Befehl include_directories. Verwenden Sie target_include_directories, damit Header nur an bestimmte Targets angehängt werden.
Kurze Überprüfung
Was bedeutet target_link_libraries(mylib PUBLIC fmt) für ein Target, das mylib verknüpft?
Zusammenfassung
Modernes CMake verwendet Targets als Arbeitseinheit. Setzen Sie Properties mit target_*-Befehlen und verwenden Sie PUBLIC/PRIVATE/INTERFACE, um zu steuern, wie Properties an Nutzer weitergegeben werden.
Häufig gestellte Fragen
Ist die Lektion „Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE“ kostenlos?
Ja — der vollständige Text von „Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE“?
Definieren Sie Targets, verknüpfen Sie Bibliotheken und verwenden Sie die Sichtbarkeit PUBLIC, PRIVATE und INTERFACE korrekt. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- CMake-Projektstruktur und CMakeLists.txt
- Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE
- Abhängigkeiten mit vcpkg und Conan verwenden
- IDE-Dateien und plattformübergreifende Builds erzeugen