294 votes

Comment ajouter correctement les répertoires include avec CMake?

Il ya environ un an, j'ai demandé sur en-tête de dépendances dans CMake.

J'ai réalisé récemment que la question semble être que CMake considérés comme ceux d'en-tête des fichiers externes au projet. Au moins, lors de la génération d'un Code::Blocks projet, les fichiers d'en-tête n'apparaissent pas dans le projet (les fichiers source). Il me semble donc que CMake tenir compte de ces en-têtes externes au projet, et de ne pas les suivre dans le dépend.

Une recherche rapide dans le CMake tutoriel ne souligné include_directories qui ne semble pas faire ce que je souhaite...

Quelle est la bonne façon de signal à CMake qu'un répertoire contenant les en-têtes, et que ces en-têtes doivent être suivis par le Makefile généré ?

312voto

SirDarius Points 13074

Deux choses doivent être faites.

Tout d'abord ajouter le répertoire à être inclus:

include_directories(${YOUR_DIRECTORY})

Ensuite, vous devez également ajouter les fichiers d'en-tête de la liste de vos fichiers source pour la cible actuelle, par exemple:

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

De cette façon, les fichiers d'en-tête apparaissent comme des dépendances dans le fichier Makefile, et aussi par exemple dans le générés projet visual studio, si vous en générer un.

Edit: Comment utiliser ces fichiers d'en-tête pour plusieurs cibles

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

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

86voto

Angew Points 53063

Tout d’abord, vous utilisez include_directories() pour indiquer à CMake d’ajouter le répertoire en tant que -I à la ligne de commande de compilation. Deuxièmement, vous listez les en-têtes dans votre appel add_executable() ou add_library() .

Par exemple, si les sources de votre projet sont en src et que vous avez besoin d’en-têtes de include , vous pouvez le faire comme suit:

 include_directories(include)

add_executable(MyExec
  src/main.c
  src/other_source.c
  include/header1.h
  include/header2.h
)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X