La création de CMakeLists fichier à partir de l'existant Makefile
Je veux utiliser cmake
pour générer mes fichiers de build pour un projet C++. J'ai déjà un Makefile
.
Je vais avoir des problèmes de production de cette Makefile
l'aide de la norme cmake
de la syntaxe.
Comment puis-je inclure des bibliothèques C++ standard, comme -lstdc++ -lpthread -lboost_thread-mt
dans le TARGET_LINK_LIBRARIES
section de cmake
? Ou que ces fichiers doivent être inclus dans le ADD_DEPENDENCIES
section.
(OU)
Est-il un simple outil qui génère un CMakeList.txt
fichier à partir d'un Makefile
OriginalL'auteur Pradeep Jawahar | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
Malheureusement, il n'est pas simple de conversion de 1:1 à partir de Makefiles pour CMakeLists. Depuis CMake est censé fonctionner sur toutes les plates-formes, il ne peut pas s'appuyer sur la plate-forme hypothèses particulières comme GNU make, ce qui complique les choses dans certains endroits.
En particulier, CMake offre un très puissant et plutôt complexe mécanisme de l'utilisation de bibliothèques: Vous appelez find_package avec le nom de votre bibliothèque, qui va lancer une recherche en bibliothèque de script à partir de votre cmake chemin d'accès du module. Ce script (qui est aussi écrit dans CMake) va tenter de détecter l'emplacement de la bibliothèque de l'en-tête et les fichiers lib et de les stocker dans un couple de variables CMake qui peut alors être transmis à la fonction CMake des commandes comme include_directories et target_link_libraries.
Il y a deux problèmes avec cette approche: tout d'Abord, vous avez besoin d'un script de recherche. Heureusement, CMake navires à la recherche de scripts pour les Pthreads, de renforcer et de quelques autres, mais si vous utilisez un plus exotiques de la bibliothèque, vous pourriez avoir à écrire le script de recherche vous-même, qui est en quelque sorte un arcane de l'expérience au premier abord...
Le second problème majeur est qu'il n'existe pas de méthode standard pour une recherche de script pour retourner à ses résultats. Bien qu'il existe des conventions de nommage des variables utilisées, celles qui, souvent, ne s'appliquent pas. Dans la pratique, cela signifie que vous allez avoir à consulter un script de recherche de la source pour savoir comment l'utiliser. Heureusement, les scripts qui viennent avec CMake sont pour la plupart très bien documenté.
La builtin scripts sont situés quelque part, comme
<cmake-install-prefix>/share/cmake-2.8/Modules
. Pour votre question, regarde la FindBoost.cmake et FindThreads.cmake fichiers (CMake devrait automatiquement lien avec la bibliothèque standard). Anycorn déjà donné des exemples de code pour utiliser le Boost de script, tout ce que vous devez savoir, c'est dans la documentation de CMake ou directement dans la recherche des fichiers de script.OriginalL'auteur ComicSansMS
Comme ceci:
Vous ne devez pas utiliser add_dependencies lorsque vous souhaitez lier les bibliothèques. La liaison implique une dépendance, mais que la dépendance n'est pas suffisante lorsque vous avez besoin de lien.
OriginalL'auteur John Zwinck
Avec Boost-vous vraiment besoin d'utiliser le package finder
OriginalL'auteur Anycorn