C++ Academy · Leçon

Cibles, liaison et visibilité PUBLIC, PRIVATE

Définir des cibles, lier des bibliothèques et utiliser correctement la visibilité PUBLIC, PRIVATE et INTERFACE

Leçon 2 sur 415 étapes

Cibles, liaison et visibilité PUBLIC, PRIVATE est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Les cibles sont l’unité de compilation

CMake moderne s’articule autour des cibles : exécutables, bibliothèques ou ensembles réservés à l’interface. Les propriétés sont attachées aux cibles et se transmettent par la liaison.

Ajouter des cibles

Utilisez add_executable, add_library ou add_library(... INTERFACE).

add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)

target_link_libraries

Liez une cible à des bibliothèques. Le troisième argument contrôle la visibilité.

target_link_libraries(myapp PRIVATE mylib)

Visibilité PUBLIC PRIVATE INTERFACE

Trois niveaux de visibilité contrôlent la propagation des dépendances aux consommateurs de cette cible :

  • PRIVATE — utilisé pour construire cette cible ; non exposé
  • INTERFACE — utilisé par les consommateurs, mais pas par cette cible
  • PUBLIC — les deux

Visualiser la propagation

Si mylib lie fmt en tant que PUBLIC, toute cible qui lie mylib obtient également les répertoires d’inclusion de fmt. PRIVATE signifie que les consommateurs ne voient pas fmt.

target_include_directories

Définissez les répertoires d’inclusion pour chaque cible. Utilisez PUBLIC pour les en-têtes que les consommateurs incluront avec #include ; utilisez PRIVATE pour les en-têtes internes.

target_include_directories(mylib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)

target_compile_definitions

Définissez les macros du préprocesseur pour la cible.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Demandez des fonctionnalités précises du langage, par exemple une norme C++.

target_compile_features(mylib PUBLIC cxx_std_20)

Bibliothèques d’interface

Une bibliothèque INTERFACE ne produit aucun fichier compilé. Utilisez-la pour regrouper des options de compilation, des en-têtes ou des liaisons dont les consommateurs doivent hériter.

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)

Bibliothèques composées uniquement d’en-têtes

Pour les bibliothèques composées uniquement d’en-têtes, déclarez une bibliothèque INTERFACE et définissez le répertoire d’inclusion comme INTERFACE.

Alias

Créez des alias avec espace de noms pour rendre les commandes de liaison plus claires.

add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)

Ordre des liaisons

CMake résout généralement correctement l’ordre des liaisons. Pour les cas circulaires complexes, utilisez l’option de l’éditeur de liens --start-group ou restructurez vos bibliothèques.

Erreur courante : include_directories global

Évitez la commande globale include_directories. Utilisez target_include_directories afin d’attacher les en-têtes uniquement à des cibles précises.

Vérification rapide

Que signifie target_link_libraries(mylib PUBLIC fmt) pour une cible qui lie mylib ?

Récapitulatif

CMake moderne utilise les cibles comme unité de travail. Définissez les propriétés avec les commandes target_* et utilisez PUBLIC, PRIVATE et INTERFACE pour contrôler la propagation des propriétés aux consommateurs.

Gratuit pour commencer

Apprends C++ avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Cibles, liaison et visibilité PUBLIC, PRIVATE » est-elle gratuite ?

Oui — le texte complet de « Cibles, liaison et visibilité PUBLIC, PRIVATE » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Cibles, liaison et visibilité PUBLIC, PRIVATE » ?

Définir des cibles, lier des bibliothèques et utiliser correctement la visibilité PUBLIC, PRIVATE et INTERFACE Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Cibles, liaison et visibilité PUBLIC, PRIVATE » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Organisation d’un projet CMake et CMakeLists.txt
  2. Cibles, liaison et visibilité PUBLIC, PRIVATE
  3. Utiliser vcpkg et Conan pour les dépendances
  4. Générer des fichiers pour les IDE et compiler sur plusieurs plateformes
← Retour à C++ Academy