0Pricing
C++ Academy · Lezione

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

  1. Struttura dei progetti CMake e CMakeLists.txt
  2. Target, linking e visibilità: PUBLIC, PRIVATE
  3. Usare vcpkg e Conan per le dipendenze
  4. Generazione di file per IDE e build multipiattaforma
← Torna a C++ Academy