0

J'utilise actuellement ce morceau de code pour générer ma liste de fichiers source pour CMake pour compiler mon projet C++:CMake générer la liste des fichiers source sans glob

file(GLOB CPP_FILES src/*.cpp) 

Comme je l'ai lu ici que cette est découragé par CMake je voudrais savoir si je peux liste les fichiers source explicitement pour CMake en utilisant CMake, comme je ne suis pas familier avec les langages de script comme Python.

Je demande cela car il faudrait beaucoup de travail pour ajouter tous les fichiers cpp manuellement dans CMake, surtout lorsque vous travaillez avec plusieurs personnes.

Le projet est indépendant de la plate-forme et mes fichiers sources se trouvent dans un sous-dossier.

+2

*** Je voudrais savoir si je peux lister les fichiers source explicitement *** Je le fais pour presque tous mes projets. Même ceux avec un millier de fichiers source. – drescherjm

+1

CMake ne générera pas de liste et ne modifiera pas un CMakeLists.txt si c'est ce que vous recherchez. J'ajoute manuellement les noms de fichiers un par un que j'écris le code. – drescherjm

+0

Cest ce que je suis après, car il faudrait beaucoup de travail pour ajouter tous les fichiers manuellement à CMake, surtout lorsque vous travaillez avec multiplier les gens. – ShadowDragon

Répondre

1

Il n'existe pas de méthode native pour CMake pour faire cela pour vous. Ce que vous pouvez faire pour les projets volumineux ou partagés est d'utiliser un script, qui peut être créé par tout ce qui peut analyser le système de fichiers ou un autre référentiel, pour générer un fichier CMake qui répertorie les fichiers source.

Ensuite, vous pouvez simplement include() ce fichier CMake généré.

Les instructions du fichier CMake peuvent utiliser target_sources() pour une cible connue.

CMakeLists.txt:

add_executable(myexe "") 
include(sourcelist) 

sourcelist.cmake:

target_sources(myexe PRIVATE 
    mysourcefile1.cpp 
    mysourcefile2.cpp 
) 

Ou par annexant à une variable:

CMakeLists.txt:

include(sourcelist) 
add_executable(myexe ${sources}) 

sourcelist.cmake:

set(sources ${sources} 
    mysourcefile1.cpp 
    mysourcefile2.cpp 
) 
+0

Pourriez-vous expliquer pour quelle raison le mot-clé ** PRIVATE ** est utilisé après _myexe_? – ShadowDragon

+0

@shadowdragon c'est juste qui utilise les informations que vous ajoutez. "PRIVATE" dit que seule cette cible actuelle l'utilise. "INTERFACE" indique que seules les autres cibles l'utilisent et que cette cible actuelle ne l'utilise pas. "PUBLIC" indique que cette cible et les autres cibles utilisent l'information. Puisque les informations dans ce cas ne sont que des noms de fichier source pour un exécutable, il est presque certainement inutile aux autres cibles car les cibles exécutables ne sont jamais utilisées par d'autres cibles (contrairement aux bibliothèques) et ne le seraient pas pour les sources . Dans ce cas, vous pouvez utiliser PRIVATE ou PUBLIC. – utopia