CMAKE: Construire la bibliothèque et de liaison contre elle
Je suis en train d'utiliser cmake (sur Linux avec GNU make et g++) pour construire un projet avec deux sous-répertoires: MyLib et MyApp. MyLib contient la source pour une bibliothèque statique; MyApp besoins de lien en face de la bibliothèque. Je suis en train de construire sur Linux avec les makefiles générés à l'aide de la suite CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)
project (MyProj)
include_directories (MyLib)
file(GLOB MyLibSrc MyLib/*.cpp)
add_library(MyLibrary STATIC ${MyLibSrc})
file(GLOB MyAppSrc MyApp/*.cpp)
add_executable(MyApplication ${MyAppSrc})
target_link_libraries(MyApplication MyLibrary)
Ce qui est "presque" des œuvres. Il échoue au moment de lien parce que tandis qu'elle génère libMyLibrary.a - il est dans la racine. Quand j'ajoute:
link_directories(${MyProj_BINARY_DIR})
il ne fait aucune différence.
J'ai un peu (inter-reliés) questions:
- Quelle est la meilleure façon de contraindre cmake dans la construction de ma bibliothèque et exécutable dans une "mise en scène du répertoire' — dire MyStage — pour garder des objectifs distincts à partir de la source?
- Comment puis-je convaincre cmake à lier l'application à l'encontre de la bibliothèque?
- Si je voulais construire un debug et une version, quelle est la meilleure façon de prolonger mon cmake scripts pour ce faire, faisant en sorte que l'application de débogage liens contre le débogage de la bibliothèque et de la libération de l'application à l'encontre de la version de bibliothèque?
Je suis un nouveau venu par rapport à cmake. J'ai lu ce que je peux trouver sur le web, mais trouver moi-même de la difficulté à obtenir ma bibliothèque de lien avec mon exécutable. Ce type de configuration, à mon avis, devrait être tout à fait commun. Un exemple pour partir à la crèche serait très utile, mais je n'ai pas trouvé un.
OriginalL'auteur aSteve | 2011-10-19
Vous devez vous connecter pour publier un commentaire.
Utilisation "hors de la source de la construction". Faire un répertoire utilisé seulement pour construire et tout, appeler
Utiliser
ou faire CMakeLists.txt dans chaque sous-répertoire - qui seraient mieux pour un projet plus grand que les très petites.
C'est un peu délicat, découvrez CMAKE_BUILD_TYPE dans les docs (vous pouvez le configurer et/ou "si"). Vous pouvez également configurer en ligne de commande:
Euh, non, non, CMakeLists.txt rester dans l'arbre source. Le chemin d'accès est passé comme argument à cmake est le répertoire qui contient le haut-niveau CMakeLists.txt. Dans cette configuration, la "mise en scène" dir est complètement vide avant de cmake invocation.
OriginalL'auteur kralyk
Bien, il est préférable de lire exemple et de faire exactement ce que suggéré.
Ensuite, pour chaque sous-répertoire spécifié, CMakeLists.txt les fichiers sont créés
MyLib\CMakeLists.txt
MyApp\CMakeLists.txt
OriginalL'auteur Sergei Nikulov
J'ai découvert la "optimale" de la solution de (1)... donc, pensé que je devrais le poster ici:
La chose qui me confond précédemment est que les bibliothèques statiques ne sont pas considérés comme une BIBLIOTHÈQUE par Cmake - ils sont considérés comme des ARCHIVEs.
OriginalL'auteur aSteve
Ne pas ajouter des bibliothèques et exécutables dans la racine Cmakelists.txt. Ajouter ces bibliothèques et exécutables dans Cmakelists.txt de sous-répertoires.
OriginalL'auteur Aditya Sood