CMake: plusieurs sous-projets utilisant la même bibliothèque statique
Je suis en utilisant cmake pour compiler un de mes travaux de projets, ici, c'est l'affaire
-
client/
CMakeLists.txt
server/
CMakeLists.txt
libs/
libstuff/
CMakeLists.txt
CMakeLists.txt
Donc, je veux être en mesure de compiler chaque sous-projet individuellement, et de construire à la fois le client et le serveur à partir du dossier racine.
Disons que le client et le serveur doivent libstuff.
J'ai essayé d'utiliser "add_subdirectory" avec le chemin de la lib à la fois le client et le serveur CMakeLists.txt il fonctionne lorsque vous compilez le serveur ou le client, mais si vous essayez d'exécuter à la fois à partir du répertoire racine :
CMake Error at common/libplugin/CMakeLists.txt:33 (ADD_LIBRARY):
add_library cannot create target "plugin" because another target with the
same name already exists. The existing target is a static library created
in source directory "/home/adrien/git/r-type/common/libplugin". See
documentation for policy CMP0002 for more details.
Donc je suis un peu nouveau w/cmake et je ne suis pas sûr de ce que je dois faire, dois-je utiliser add_dependencies?
Merci pour votre aide,
source d'informationauteur Intrepidd
Vous devez vous connecter pour publier un commentaire.
Une solution simple est de garder l'
add_subdirectory
appels à la fois le client et le serveur CMake liste de fichier avec unif
à l'aide d'un CIBLE conditionnelle, c'est à dire:Cela empêche la
libplugin
sous-répertoire d'être ajouté plus d'une fois.Je suggère de mettre trois add_subdirectory des appels dans le répertoire racine de votre CMakeLists.txt. libstuff d'abord, puis le client et le serveur....
Installation de la substance projet comme si elle est autonome, mais ajouter des variables à l'cmake cache ce qu'il peut être "importés" par d'autres projets. Ensuite, le client et le serveur, vous pouvez vous référer à ce projet... à l'aide d'ordinaire appel include_directories et target_link_libraries.
E. g. dans libstuff...
Puis en Client (et de même pour le Serveur)
Vous pouvez alors "compiler" seul le répertoire du Client, en s'aventurant dans le Client dir et l'exécution de make ou msbuild. Alternativement, vous pouvez ajouter un cmake-drapeau de la racine-cmakelistt qui sert de filtre entre le Client, le Serveur ou les deux...