Maison >développement back-end >C++ >Comment gérer correctement les répertoires d'inclusion et les fichiers d'en-tête dans CMake ?

Comment gérer correctement les répertoires d'inclusion et les fichiers d'en-tête dans CMake ?

DDD
DDDoriginal
2024-12-27 19:49:14899parcourir

How Do I Properly Manage Include Directories and Header Files in CMake?

Comprendre l'inclusion des répertoires dans CMake

Lorsque vous travaillez avec des fichiers d'en-tête dans CMake, il est crucial de garantir une inclusion et un suivi des dépendances appropriés. CMake fait la différence entre les fichiers d'en-tête internes et externes au projet. Pour inclure correctement les fichiers d'en-tête, suivez ces étapes :

  1. Ajoutez le répertoire d'inclusion :

    Pour spécifier un répertoire contenant les fichiers d'en-tête à inclure, utilisez la fonction target_include_directories :

    target_include_directories(test PRIVATE ${YOUR_DIRECTORY})

    Pour les anciennes versions de CMake sans target_include_directories, utilisez include_directories à la place :

    include_directories(${YOUR_DIRECTORY})
  2. Ajouter des en-têtes aux fichiers source :

    Pour suivre les dépendances et générer des Makefiles précis, ajoutez les fichiers d'en-tête à la liste des fichiers sources pour la cible actuelle :

    set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
    add_executable(test ${SOURCES})

En suivant ces étapes, CMake reconnaîtra les en-têtes spécifiés dans le cadre du projet et les inclura dans son suivi des dépendances, garantissant ainsi une gestion appropriée dans les fichiers de sortie générés tels que les Makefiles et les fichiers de projet pour les IDE.

Utilisation des en-têtes sur plusieurs cibles :

Pour réutiliser les en-têtes sur plusieurs cibles, envisagez l'approche suivante :

set(HEADER_FILES ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)

add_library(mylib libsrc.cpp ${HEADER_FILES})
target_include_directories(mylib PRIVATE ${YOUR_DIRECTORY})
add_executable(myexec execfile.cpp ${HEADER_FILES})
target_include_directories(myexec PRIVATE ${YOUR_DIRECTORY})

Cette méthode garantit que les cibles de bibliothèque et d'exécutable incluent les en-têtes spécifiés et suivent correctement leurs dépendances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn