Je travaille sur un projet C ++ open source, pour du code qui se compile sous Linux et Windows. J'utilise CMake pour construire le code sous Linux. Pour faciliter la configuration du développement et des raisons politiques, je dois m'en tenir aux fichiers de projet / éditeur Visual Studio sous Windows (je ne peux pas basculer vers Code :: Blocks , par exemple). Je vois des instructions pour générer des fichiers Visual Studio à l'aide de CMake, comme ici .
Avez-vous déjà utilisé CMake pour générer des fichiers Visual Studio? Quelle a été votre expérience? Supposons que je veuille ajouter un nouveau fichier à mon projet. Quel est le flux de travail pour cela?
Réponses:
CMake est en fait assez bon pour cela. L'élément clé était que tout le monde du côté Windows devait se rappeler d'exécuter CMake avant de charger la solution, et tout le monde de notre côté Mac devrait se rappeler de l'exécuter avant de faire.
La partie la plus difficile était en tant que développeur Windows de s'assurer que vos modifications structurelles étaient dans le fichier cmakelist.txt et non dans les fichiers de solution ou de projet, car ces modifications seraient probablement perdues et même si elles n'étaient pas perdues, elles ne seraient pas transférées du côté Mac qui en avait également besoin, et les gars de Mac devraient se souvenir de ne pas modifier le fichier de création pour les mêmes raisons.
Cela demande juste un peu de réflexion et de patience, mais il y aura des erreurs au début. Mais si vous utilisez l'intégration continue des deux côtés, celles-ci seront ébranlées tôt et les gens finiront par prendre l'habitude.
la source
C:\...> MSBuild ALL_BUILD.vcxproj
cmake --build .
.cmake --build . --config Debug -- /nologo /verbosity:minimal /m
..
target run_tests
J'insérerai après pour exécuter mon test unitaire googletest, et "Debug" peut être remplacé par "Release". (L'ajout de l'option de configuration pour le débogage est facultatif, car c'est la valeur par défaut, mais je l'ai inclus pour montrer comment il peut être échangé avec "Release")Je ne sais pas si c'est directement lié à la question, mais je cherchais une réponse pour savoir comment générer * .sln à partir de projets cmake.J'ai découvert que l'on pouvait utiliser quelque chose comme ceci:
L'exemple génère les fichiers VS 2010 nécessaires à partir d'un fichier CMakeLists.txt d'entrée
la source
cmake
.Nous avons déplacé la chaîne de construction de notre département vers CMake, et nous avons eu quelques roadbumps internes depuis que d'autres départements utilisaient nos fichiers de projet et étaient habitués à simplement les importer dans leurs solutions. Nous avons également eu quelques plaintes concernant CMake n'étant pas entièrement intégré dans le gestionnaire de projet / solution Visual Studio, donc les fichiers ont dû être ajoutés manuellement à CMakeLists.txt; c'était une rupture majeure dans le flux de travail auquel les gens étaient habitués.
Mais en général, c'était une transition assez douce. Nous sommes très heureux car nous n'avons plus à gérer les fichiers de projet.
Le flux de travail concret pour ajouter un nouveau fichier à un projet est vraiment simple:
CMake 2.6 se réexécute automatiquement si des fichiers CMakeLists.txt ont changé (et (semi-) recharge automatiquement la solution / les projets).
N'oubliez pas que si vous effectuez des builds hors source, vous devez faire attention à ne pas créer le fichier source dans le répertoire de build (puisque Visual Studio ne connaît que le répertoire de build).
la source
Comme le dit Alex, cela fonctionne très bien. La seule partie délicate est de ne pas oublier d'apporter des modifications aux fichiers cmake, plutôt qu'à partir de Visual Studio. Ainsi, sur toutes les plates-formes, le flux de travail est similaire à celui utilisé si vous aviez utilisé d'anciens fichiers makefiles.
Mais il est assez facile de travailler avec, et je n'ai eu aucun problème avec cmake générant des fichiers invalides ou quelque chose comme ça, donc je ne m'inquiéterais pas trop.
la source
CMake produit des projets et des solutions Visual Studio de manière transparente. Vous pouvez même produire des projets / solutions pour différentes versions de Visual Studio sans apporter de modifications aux fichiers CMake.
L'ajout et la suppression de fichiers source consistent simplement à modifier le
CMakeLists.txt
qui contient la liste des fichiers sources et à régénérer les projets / solutions. Il existe même une fonction de globbing pour trouver toutes les sources dans un répertoire (bien qu'elle doive être utilisée avec précaution).Le lien suivant explique très bien le comportement spécifique de CMake et de Visual Studio.
CMake et Visual Studio
la source
CMake peut générer un très joli Visual Studio
.projs
/.slns
, mais il y a toujours le problème avec la nécessité de modifier les.cmake
fichiers plutôt que.proj
/.sln
. Tel qu'il est actuellement, nous le traitons comme suit:/src
et les fichiers visibles dans Visual Studio ne sont que des «liens» vers ceux définis dans.filter
./src
répertoire défini , pas celui du projet par défaut..cmake
fichiers respectifs .Au début, nous avions un peu peur de la façon dont cela allait se passer, mais le flux de travail fonctionne très bien et avec de jolis diff visibles avant chaque commit, tout le monde peut facilement voir si ses modifications ont été correctement mappées dans les
.cmake
fichiers.Une autre chose importante à savoir est le manque de soutien ( afaik ) pour les «Configurations de solution» dans CMake. En l'état, vous devez générer deux répertoires avec des projets / solutions - un pour chaque type de construction (debug, release, etc.). Il n'y a pas de support direct pour des fonctionnalités plus sophistiquées - en d'autres termes: basculer entre les configurations ne vous donnera pas ce à quoi vous pourriez vous attendre.
la source
Beaucoup de bonnes réponses ici, mais elles pourraient être remplacées par ce support CMake dans Visual Studio (5 octobre 2016)
la source
J'ai commencé mon propre projet, appelé syncProj. Liens de documentation / téléchargement à partir d'ici:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
Si vous envisagez d'utiliser Visual studio pour le développement et que seul C ++ est actuellement pris en charge.
Le principal avantage par rapport aux autres systèmes de marque est que vous pouvez réellement déboguer votre script, car il est basé sur C #.
Si vous n'êtes pas familier avec syncProj, vous pouvez simplement convertir votre solution / projet en script .cs et poursuivre le développement à partir de là.
Dans cmake, vous devrez tout écrire à partir de zéro.
la source