Comment utiliser tous les *.c les fichiers dans un répertoire avec le système de compilation Cmake?
Je veux trouver toutes les .c fichiers dans un répertoire et de tous les ajouter à la SRC fichiers à compiler dans cmake. Comment puis-je faire dans CMakeList.txt.
régulièrement des makefiles je peux créer
SPECIFIED_SRC_FILE = $(foreach d,$(SPECIFIED_SRC_DIRS),$(wildcard $(addprefix $(d)/*,*.c)))
mais je ne pouvais pas comment faire quelque chose comme ceci dans CMakeList.txt.
- Notez que "recueillir tous les fichiers source avec glob" est pas recommandée CMake: Nous ne recommandons pas l'utilisation de
GLOB
à recueillir une liste de fichiers source de votre arborescence des sources. Si aucunCMakeLists.txt
modifications du fichier lorsqu'une source est ajouté ou supprimé, l'généré système de construction ne peut pas savoir quand demander de CMake pour se régénérer. - à partir de documentation - est-il une alternative qui ne nécessite pas d'écrire chaque nom de fichier manuellement?
- Si vous voulez éviter d'écrire chaque nom de fichier, puis je pense que
foreach
mentionné par l'OP est le chemin à parcourir. Cependant, CMake équipe semble recommander l'écriture manuelle de chaque nom de fichier. - l'écriture manuelle de chaque nom de fichier ??? Sérieusement ?
- Est-il quelque chose dans les nouvelles versions de CMake qui permettent à l'auto-trouver les fichiers source à chaque fois que vous exécutez le faire?
- Oui, sérieusement.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Comment sur le bon vieux expansion?
GLOB_RECURSE
si vous voulez vous trouver les fichiers de manière récursive.Oui, vous avez deux options. Supposons que la structure du dossier quelque chose de semblable.
Si vous êtes à utiliser
AUX_SOURCE_DIRECTORY
vous devez ajouter CMakeLists.txt chacun des sous-répertoires. Ensuite, vous devez inclure et de relier tous ces sous-répertoires. C'est une tâche assez difficile. Ainsi, vous pouvez vous GLOB et de faire le travail très facilement. C'est comment il est fait.Si vous souhaitez créer une bibliothèque ci-dessus en utilisant le code source c'est la commande:
Si vous souhaitez créer un fichier exécutable ci-dessus en utilisant le code source c'est la commande:
GLOB_RECURSE
récursive exempleIl fait, fondamentalement, la
*
aussi aller dans les sous-répertoires:Et puis nos sources, pourraient être situés par exemple:
Et
main.c
utilise#include "d/a.h"
eta.c
utilise#include "a.h"
.À l'aide de
GLOB_RECURSE
sur le CMake toplevel (c'est à dire"*.c"
au lieu de"src/*.c"
) est probablement une mauvaise idée, car il peut ramasser.c
les fichiers générés par CMake lui-même qui sont placés sousbuild/
.Praticable exemple sur GitHub.
Vous pouvez utiliser
AUX_SOURCE_DIRECTORY
comme @whitequark décrit, mais il ne sera pas vraiment le travail que vous attendez, comme CMake sera pas en mesure de déterminer lorsque de nouveaux fichiers sont ajoutés (qui est en quelque sorte le point de l'ensemble avec l'aide d'un générique).