Область действия переменной cmake, add_subdirectory - PullRequest
60 голосов
/ 31 июля 2011

У меня есть CMakeLists.txt в корне моего проекта и один в моей папке / src.Один в папке / src содержит только переменную с файлами .cpp (set (SOURCEFILES main.cpp foo.cpp)) и в корне CMakeLists.txt, который я делаю add_subdirectory(src), а позже я делаю add_executable(MyApp ${SOURCEFILES}).

Но cmake даетme ошибка

add_executable, вызванная с неправильным числом аргументов, источники не предоставлены

Как мне заставить cmake увидеть переменную?Я читал, что cmake знает только глобальные переменные, но это явно не так ...

1 Ответ

93 голосов
/ 31 июля 2011

Как упомянуто в документации команды set , каждый каталог, добавленный с add_subdirectory или каждая функция, объявленная с function, создает новую область.

Новая дочерняя область наследуетвсе определения переменных из родительской области видимости.Переменные в новой дочерней области с помощью команды set будут видны только в дочерней области, если не используется опция PARENT_SCOPE.

Чтобы сделать назначение SOURCEFILES видимым в корневой папке вашего проекта, попробуйте:

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