CMakeLists.txt fichiers pour plusieurs bibliothèques et exécutables
Je commence tout juste à jouer avec CMake. J'ai quelque chose comme:
/DEV
|-- lib1
| CMakeLists.txt
|-- lib2
| CMakeLists.txt
|-- exe1
| CMakeLists.txt
/BUILD
|-- lib1
|-- lib2
|-- exe1
/INSTALL
|-- include
|-- lib
|-- bin
Je voudrais:
- Construire chaque lib et exe indépendamment en cas de besoin. (Donc je suppose que je dois ajouter une CMakeLists.txt fichier pour chaque lib et exe);
- Lors de la construction, répertoires include et lib devrait référence du répertoire d'INSTALLATION; (est-ce une bonne idée?)
- Lors de la construction, ajouter des dépendances à d'autres lib et de les reconstruire si pas à jour.
Je n'ai pas la moindre idée par où commencer. S'il vous plaît aider...
source d'informationauteur Korchkidu
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de personne CMakeLists.txt pour construire les objectifs de façon indépendante. Disons que vous avez un haut niveau de CMakeLists.txt avec:
Ensuite, vous pouvez créer tout lib1 en exécutant
make lib1
oumsbuild lib1.vcxproj
etc. Vous pouvez obtenir le même par avoir individuelle CMakeLists.txt fichiers par cible - c'est à vous si vous pensez que ça en vaut la peine.Si votre projet importations de ces objectifs, en utilisant
FIND_LIBRARY
ouFIND_PACKAGE
puis ils ne être reconstruits s'ils ne sont pas à jour. En fin de compte, si vous voulez out-of-date, les dépendances automatiquement reconstruit, vous devez laisser CMake savoir sur les sources et les règles pour l'dépendant de la cible, c'est à dire la CMakeLists.txt le fichier doit avoir ajouté la cible à l'aideADD_LIBRARY
ouADD_EXECUTABLE
.Vous ne devriez pas avoir besoin de référencer le répertoire d'INSTALLATION (sauf dans
INSTALL
commandes, j'imagine), depuis CMake va implicitement utiliser des libs/exe construire des lieux plutôt que les emplacements lors de la liaison des cibles.À
juste ajouter
EXCLUDE_FROM_ALL
mot-clé dansadd_executable()
ouadd_library()
appels.Si par
referencing
- vous dire de l'ajouter àinclude_directories()
etlink_directories()
alors il n'est pas agréable. Il est préférable de ne pas faire valoir sur l'emplacement des fichiers nécessaires sur le système de l'utilisateur. La bonne façon est de localiser des inclusions et des bibliothèques à l'aide defind_package()
find_library()
oufind_file()
. Si vous souhaitez utiliser la première fonction, vous devez écrireFindYourLib.cmake
et installer le long de la bibliothèque elle-même.Ceci est fait automatiquement par CMake. Les dépendances peuvent être ajoutés avec
add_dependencies()
fonction ou implicitement avectarget_link_libraries()
.