web-dev-qa-db-fra.com

Comment générer CMakeLists.txt?

J'ai besoin de quelques conseils/conseils sur la façon de générer automatiquement des fichiers CMakeLists.txt pour CMake. Est-ce que quelqu'un connaît des générateurs existants? J'ai vérifié celles énumérées dans CMake Wiki mais malheureusement, elles ne me conviennent pas. 

J'ai déjà un script Python de base qui parcourt la structure de répertoires de mon projet et génère les fichiers requis, mais il est vraiment "stupide" pour le moment. Je souhaiterais l'augmenter pour prendre en compte, par exemple, les différentes plates-formes pour lesquelles je construis, le compilateur\compilateur croisé que j'utilise ou différentes versions des dépendances de bibliothèques que je pourrais avoir. Je n'ai pas beaucoup d'expérience avec CMake et un exemple sur lequel je pourrais baser mon travail ou un générateur déjà en activité pourrait être d'une grande aide.

46
celavek

Je suis d'avis qu'il n'est pas nécessaire d'utiliser un script automatisé pour générer CMakeLists.Txt, car il est très simple d'en rédiger un après avoir compris la procédure de base. Ouais, je suis d'accord pour dire que comprendre la procédure pour écrire un texte, telle que donnée dans CMake Wiki, est également difficile car trop détaillé.

Un exemple très basique montrant comment écrire CMakeLists.txt est montré à ici , ce qui, je pense, sera utile à tout le monde, même à ceux qui vont écrire CMakeLists.txt pour la première fois.

24
Preeti Kaur

Bien, je n'ai pas beaucoup d'expérience dans Cmake non plus, mais pour effectuer une multiplateforme, il faut écrire et modifier beaucoup de fichiers, y compris le fichier CMakeLists.txt, je vous suggère d'utiliser ce nouvel outil appelé l'outil plutôt cool, il fait tout le travail supplémentaire nécessaire et facilite la génération de tels fichiers pour des sources tierces avec peu d'effort . Il suffit de lire attentivement le README avant de l'utiliser.

Lien: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=54842

11
wOlVeRiNe

Je pense que vous faites cela à l'envers.

Lorsque vous utilisez CMake, vous êtes censé écrire vous-même le fichier CMakeLists.txt. En règle générale, vous n'avez pas besoin de gérer différents compilateurs, car CMake en a connaissance. Cependant, si vous devez le faire, vous pouvez ajouter du code dans CMakeFiles pour effectuer différentes opérations en fonction de l'outil utilisé.

11
Lindydancer

CLion est un environnement de développement intégré entièrement basé sur le fichier de projet CMake.

Il est capable de générer lui-même le fichier CMakeLists.txt lors de l'utilisation du projet import depuis source

Cependant, il est fort probable que vous deviez éditer ce fichier manuellement au fur et à mesure de la croissance du projet et de l'ajout d'une dépendance externe.

4
nicolas-f

Peut-être que cela pourrait être utile:

https://conan.io/

L'auteur a donné quelques discours sur cmake et sur la création de projets modulaires utilisant cmake dans CPPCon. Autant que je sache, cet outil nécessite cmake, de sorte que je suppose qu'il le génère lorsque vous intégrez de nouveaux packages ou créez de nouveaux packages. Récemment, j'ai lu quelque chose sur la manière d'écrire une description de niveau supérieur du projet C/C++ en utilisant un fichier YAML, mais je ne savais pas s'il faisait partie de conan ou non (ce que j'ai lu était de l'auteur de conan). Je ne l’ai jamais utilisé, et c’est quelque chose qui est en suspens pour moi, c’est pourquoi, si vous l’utilisez et répondez à vos besoins, commentez vos opinions à ce sujet et comment il correspond à votre scénario.

Je ne suis pas sûr qu'il s'agisse d'un problème auquel l'affiche originale a été confrontée, mais comme je vois plein de réponses «écrivez simplement« CMakefile.txt »» ci-dessus, laissez-moi expliquer brièvement pourquoi la création de CMakefiles peut avoir un sens:

a) J'ai un autre système de construction avec lequel je suis assez satisfait

(et qui couvre un grand nombre de constructions multiplateformes d’une grande collection de bibliothèques, programmes, extensions de langage et scripts partagés et statiques interconnectés et d’outils, avec diverses dépendances internes et externes , décalages et variantes)

b) Même si je devais le remplacer, je ne considérerais pas cmake.

J'ai jeté un œil à CMakefiles et je ne suis pas content de la syntaxe et pas heureux avec la sémantique.

c) CLion utilise uniquement CMakefiles et Cmakefiles (et semble quelque peu intéressant)

Donc, pour donner une chance à CLion (j'aime PyCharm, donc c'est tentant), mais pour continuer à utiliser mon système de construction, j'utiliserais volontiers un outil qui me permettrait de Mettre en œuvre make generate_cmake et que tous les fichiers CMake nécessaires soient générés à la volée en fonction du fichier currentinfo extrait de mon système de construction. Je peux volontiers fournir à l'outil/au script des informations sur les sources et les en-têtes de mon application, sur les bibliothèques et les programmes qu'elle est censée créer, sur les options -I, -L, -D, etc., pour quel composant, etc. etc.

Eh bien, bien sûr, je serais beaucoup plus heureux si JetBrains permettait de fournir un protocole direct permettant de fournir à IDE les informations dont il a besoin (Par exemple, m'a permis de fournir ma propre commande pour compiler, run, et à émettre les métadonnées dont ils ont vraiment besoin - je suppose qu'ils ont principalement besoin d'incdirs et de définitions à implémenter à la volée, et de libpaths pour configurer LD_LIBRARY_PATH pour le débogueur), sans faire référence à cmake. CMakefiles en tant que protocole sont quelque peu compliqués.

0
Mekk