Depuis CMake 3.1+, les développeurs décourager fortement les utilisateurs d'utiliser file(GLOB
o file(GLOB_RECURSE
pour collecter des listes de fichiers sources.
Remarque : Il n'est pas recommandé d'utiliser GLOB pour collecter une liste de fichiers source à partir de votre arborescence. Si aucun fichier CMakeLists.txt n'est modifié lorsqu'une source est ajoutée ou supprimée, le système de compilation généré ne peut pas savoir quand demander à CMake de régénérer. Le drapeau CONFIGURE_DEPENDS peut ne pas fonctionner de manière fiable sur tous les générateurs, ou si un nouveau générateur est ajouté dans le futur qui ne peut pas le supporter, les projets qui l'utilisent seront bloqués. Même si CONFIGURE_DEPENDS fonctionne de manière fiable, il est toujours coûteux d'effectuer la vérification à chaque recompilation.
Voir le documentation ici .
Il y a deux bonnes réponses ( [1] , [2] ) sur SO détaillant les raisons de lister manuellement les fichiers sources.
C'est possible. Par exemple, avec file(GLOB
:
cmake_minimum_required(VERSION 2.8)
file(GLOB helloworld_SRC
"*.h"
"*.cpp"
)
add_executable(helloworld ${helloworld_SRC})
Notez que cela nécessite manuel ré-exécution de cmake
si un fichier source est ajouté ou supprimé, car le système de compilation généré ne sait pas quand demander à CMake de régénérer, et le faire à chaque compilation augmenterait le temps de compilation.
Depuis CMake 3.12, vous pouvez passer l'option CONFIGURE_DEPENDS
à file(GLOB
pour vérifier et réinitialiser automatiquement les listes de fichiers à chaque fois que la construction est invoquée. Vous devez écrire :
cmake_minimum_required(VERSION 3.12)
file(GLOB helloworld_SRC CONFIGURE_DEPENDS "*.h" "*.cpp")
Cela permet au moins d'éviter de relancer manuellement CMake à chaque fois qu'un fichier est ajouté.
0 votes
Dans Visual Studio, au moins pour les projets C#, il y a un bouton dans la barre d'outils de l'explorateur de projet, appelé "show all files" (montrer tous les fichiers). Il rend visibles tous les sous-répertoires d'un projet, grisés s'ils ne contiennent pas de fichiers logiquement inclus dans le projet. Vous pouvez inclure ces répertoires via le menu contextuel, ce qui inclut tous les fichiers sources qu'ils contiennent, de manière récursive :)
3 votes
Duplicata possible de Comment utiliser tous les fichiers *.c d'un répertoire avec le système de construction Cmake ?