Target, linking e visibilità: PUBLIC, PRIVATE
Definisca target, colleghi librerie e usi correttamente la visibilità PUBLIC, PRIVATE, INTERFACE
Target, linking e visibilità: PUBLIC, PRIVATE è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
I target sono l'unità di build
CMake moderno ruota intorno ai target: eseguibili, librerie o insiemi costituiti solo da interfaccia. Le proprietà vengono associate ai target e propagate tramite il linking.
Aggiungere target
Utilizzi add_executable, add_library oppure add_library(... INTERFACE).
add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)target_link_libraries
Colleghi un target alle librerie. Il terzo argomento controlla la visibilità.
target_link_libraries(myapp PRIVATE mylib)Visibilità PUBLIC PRIVATE INTERFACE
Esistono tre livelli di visibilità: controllano se le dipendenze vengono propagate agli utilizzatori di questo target:
- PRIVATE — utilizzato per compilare questo target; non viene esposto
- INTERFACE — utilizzato dagli utilizzatori, non da questo target
- PUBLIC — entrambe le cose
Visualizzare la propagazione
Se mylib collega fmt come PUBLIC, qualsiasi target che collega mylib riceve a sua volta le directory di inclusione di fmt. PRIVATE significa che gli utilizzatori non vedono fmt.
target_include_directories
Imposti le directory di inclusione per ogni target. Utilizzi PUBLIC per gli header che gli utilizzatori includeranno con #include; PRIVATE per gli header interni.
target_include_directories(mylib
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)target_compile_definitions
Imposti le macro del preprocessore per il target.
target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)target_compile_features
Richieda funzionalità specifiche del linguaggio, ad esempio uno standard C++.
target_compile_features(mylib PUBLIC cxx_std_20)Librerie di interfaccia
Una libreria INTERFACE non produce alcun output compilato. La utilizzi per raggruppare opzioni di compilazione, header o collegamenti che gli utilizzatori devono ereditare.
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)Librerie header-only
Per le librerie header-only, dichiari una libreria INTERFACE e imposti la directory di inclusione come INTERFACE.
Alias
Crei alias qualificati con namespace per rendere più chiari i comandi di linking.
add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)Ordine di linking
CMake risolve generalmente correttamente l'ordine di linking. Nei complessi casi circolari, utilizzi il flag del linker --start-group oppure ristrutturi le librerie.
Errore comune: include_directories globale
Eviti il comando globale include_directories. Utilizzi target_include_directories, così gli header vengono associati soltanto a target specifici.
Verifica rapida
Che cosa significa target_link_libraries(mylib PUBLIC fmt) per un target che collega mylib?
Riepilogo
CMake moderno utilizza i target come unità di lavoro. Imposti le proprietà con i comandi target_* e utilizzi PUBLIC/PRIVATE/INTERFACE per controllare la propagazione delle proprietà agli utilizzatori.
Domande Frequenti
La lezione «Target, linking e visibilità: PUBLIC, PRIVATE» è gratuita?
Sì — il testo completo di «Target, linking e visibilità: PUBLIC, PRIVATE» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Target, linking e visibilità: PUBLIC, PRIVATE»?
Definisca target, colleghi librerie e usi correttamente la visibilità PUBLIC, PRIVATE, INTERFACE Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Target, linking e visibilità: PUBLIC, PRIVATE»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Struttura dei progetti CMake e CMakeLists.txt
- Target, linking e visibilità: PUBLIC, PRIVATE
- Usare vcpkg e Conan per le dipendenze
- Generazione di file per IDE e build multipiattaforma