我的项目根目录中有一个 CMakeLists.txt,在/src 文件夹中有一个。/src 文件夹中的那个仅包含一个带有 .cpp 文件的变量(set (SOURCEFILES main.cpp foo.cpp)
),在根 CMakeLists.txt 中我执行 add_subdirectory(src )
然后我执行 add_executable(MyApp ${SOURCEFILES})
。
但是 cmake 给了我错误
add_executable called with incorrect number of arguments, no sources provided
我读到 CMake 只知道全局变量,但显然情况并非如此...关于变量作用域在 CMake 中如何工作来解释这一点,我缺少什么?知道了这一点,我如何让 CMake 看到该变量?
最佳答案
正如 set 的文档中所述命令,每个目录添加add_subdirectory
或用 function
声明的每个函数创建一个新范围。
新的子作用域继承其父作用域的所有变量定义。使用 set
命令在新子作用域中进行的变量分配仅在子作用域中可见,除非使用 PARENT_SCOPE
选项。
要使 SOURCEFILES
分配在项目的根文件夹中可见,请尝试:
set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE)
关于scope - 为什么在 add_subdirectory-ing 定义它的 CMakeLists.txt 后变量值不可用?我怎样才能做到这样呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891447/