web-dev-qa-db-fra.com

portée variable cmake, add_subdirectory

J'ai un CMakeLists.txt dans ma racine de projet et un dans mon dossier/src. Celui du dossier/src ne contient qu'une variable avec les fichiers .cpp (set (SOURCEFILES main.cpp foo.cpp)) et dans la racine CMakeLists.txt je fais add_subdirectory(src) et plus tard je fais add_executable(MyApp ${SOURCEFILES}).

Mais cmake me donne l'erreur

add_executable appelé avec un nombre d'arguments incorrect, aucune source fournie

Comment obtenir cmake pour voir la variable? J'ai lu que cmake ne connaissait que les variables globales, mais ce n'est évidemment pas le cas ...

63
blubberbernd

Comme mentionné dans la documentation de la commande set , chaque répertoire ajouté avec add_subdirectory Ou chaque fonction déclarée avec function crée une nouvelle portée.

La nouvelle portée enfant hérite de toutes les définitions de variables de sa portée parent. Les affectations de variables dans la nouvelle portée enfant avec la commande set ne seront visibles que dans la portée enfant, sauf si l'option PARENT_SCOPE Est utilisée.

Pour rendre l'affectation SOURCEFILES visible dans le dossier racine de votre projet, essayez:

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
96
sakra