Comment puis-je créer correctement les dépendances entre les cibles dans CMake?
Je suis en train d'utiliser CMake pour définir de simples dépendances entre un projet C++ et les bibliothèques qu'il utilise.
La mise en place est comme suit
- Projet
- Dépendance
Projet lui-même contient les fichiers source qui incluent des en-têtes de Dependency
et lors de la construction de l'exécutable, il doit être lié à l'encontre de Dependency
's bibliothèque statique.
Jusqu'à présent je peux obtenir que cela fonctionne, mais je dois spécifier les répertoires include de Dependency
dans le CMakeLists.txt
fichier pour Project
manuellement. Je veux que ce soit retirés automatiquement, et j'ai exploré la possibilité d'utiliser le find_package()
commande de le faire avec un succès limité et rendre les choses beaucoup plus compliquées.
Tout ce que je veux faire est de les avoir Dependency
construits avant Project
et ont Project
lien en face de la bibliothèque et inclure des répertoires. Est-il une simple manière concise d'atteindre cet objectif?
Mes fichiers CMake:
Project
, fichier CMakeLists.txt
:
cmake_minimum_required (VERSION 2.6)
project (Project)
include_directories ("${PROJECT_SOURCE_DIR}/Project")
add_subdirectory (Dependency)
add_executable (Project main.cpp)
target_link_libraries (Project Dependency)
add_dependencies(Project Dependency)
Dependency
, fichier CMakeLists.txt
:
project(Dependency)
add_library(Dependency SomethingToCompile.cpp)
target_link_libraries(Dependency)
- Paiement: stackoverflow.com/questions/10004134/...
Vous devez vous connecter pour publier un commentaire.
Depuis
CMake 2.8.11
vous pouvez utilisertarget_include_directories
. Simplement ajouter dans votre DÉPENDANCE projet de cette fonction et de remplir inclure des répertoires que vous voulez voir dans le projet principal. CMake prendra soin du reste.PROJET, CMakeLists.txt:
De DÉPENDANCE, CMakeLists.txt
Il n'est pas exactement clair ce que vous voulez faire, et pourquoi le Projet et Depency ont à construire séparément.
Mon premier bien sur votre exemple serait
Dans le PROJET, CMakeLists.txt
Il n'est pas nécessaire de spécifier la dépendance, target_link_libraries() déjà fait.
Dans la DÉPENDANCE, CMakeLists.txt
Il construit une bibliothèque, alors pourquoi avoir propre projet ?
Parce qu'il ne fait rien