Comment définir include_directories à partir d'un CMakeLists.txt fichier?
Je semble avoir de la difficulté à mettre l'include path ("-I") à l'aide de la include_directories() la commande CMake. Mon répertoire du projet est comme suit:
Root
| - CMakeLists.txt
| - libs
| - | - CMakeLists.txt
| - | - inc
| - | - | - //lib specific includes
| - | - src
| - | - | - //lib specific sources
| - proj1
| - | - CMakeLists.txt
| - | - inc
| - | - | - //proj1 specific includes
| - | - src
| - | - | - //proj1 specific sources
La racine CMakeLists fichier ressemble à ceci:
project(ROOT)
add_subdirectory(libs)
add_subdirectory(proj1)
L'CMakeLists.txt fichier sous libs:
project(lib)
add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) //for conciseness, omitted set()
Et enfin, la CMakeLists.txt fichier sous proj1
project(proj1)
include_directories("${ROOT_SOURCE_DIR}/lib/inc") # <- problem line?
add_executable(proj1 ${proj1_srcs})
target_link_libraries(proj1 lib)
L'objectif est de créer la bibliothèque de la source et les fichiers d'en-tête dans les libs, puis les lier à l'encontre de la execuable généré sous proj1. Proj1 a certains fichiers #include trucs dans libs comprendre, donc j'ai besoin d'ajouter des répertoires à être utilisé avec l'option "-I". Basé sur la documentation, c'est ce que include_directories est censé faire. Cependant, malgré la définition explicite de que et en le suivant avec un message de débogage(${INCLUDE_DIRECTORIES}), le INCLUDE_DIRECTORIES variable est une chaîne vide, et pas de répertoires sont spécifiés pour le chemin, de sorte que ma compilation de proj1 échoue.
J'ai aussi essayé de retirer les guillemets autour de ${ROOT_SOURCE_DIR}/inc pour voir si cela a aidé mais pas de chance.
include_directories("${ROOT_SOURCE_DIR}/lib/inc")
mais lib
devrait être libs
. Et en invoquant la CMake fonction include_directories
de ne pas remplir une variable nommée INCLUDE_DIRECTORIES
.Toutes mes excuses, c'est juste une faute de frappe dans la question.
OriginalL'auteur HD_Mouse | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
include_directories() remplit un répertoire de propriété appelée INCLUDE_DIRECTORIES:
http://www.cmake.org/cmake/help/v2.8.12/cmake.html#prop_dir:INCLUDE_DIRECTORIES
Noter que CMake 2.8.11 appris la target_include_directories de commande, qui remplit le INCLUDE_DIRECTORIES la propriété cible.
http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories
Notez également que vous pouvez coder le fait que " pour compiler contre les en-têtes de la lib cible, le répertoire lib/inc est nécessaire dans la lib cible elle-même en utilisant target_include_directories avec le mot-clé PUBLIC.
Note aussi je suis en supposant que vous n'avez pas installé la librairie de la bibliothèque à utiliser pour les autres. Dans ce cas, vous devrez spécifier l'en-tête différents répertoires pour l'emplacement de génération et pour l'emplacement d'installation.
De toute façon, c'est important que si vous installez lib pour les autres à utiliser.
Après la target_include_directories(lib ...) ci-dessus, vous n'avez pas besoin de l'autre include_directories (). La lib cible", dit à' proj1 l'inclure des répertoires qu'il doit utiliser.
Voir aussi target_compile_defintions() et target_compile_options().
Donc, c'est ce que le PUBLIC est pour. La documentation n'était pas tout à fait clair sur elle.
JAB: cmake.org/cmake/help/v3.2/manual/...
target_include_directories(<your_lib> PUBLIC <dir1_with_path> <dir2_path>)
ce que je cherchais. Cela permet de spécifier des "comprend, pour la cible spécifiée uniquement".OriginalL'auteur steveire