0Pricing
C++ Academy · Lektion

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

  1. CMake-Projektstruktur und CMakeLists.txt
  2. Targets, Linking und Sichtbarkeit: PUBLIC, PRIVATE
  3. Abhängigkeiten mit vcpkg und Conan verwenden
  4. IDE-Dateien und plattformübergreifende Builds erzeugen
← Zurück zu C++ Academy