scope - 为什么在 add_subdirectory-ing 定义它的 CMakeLists.txt 后变量值不可用?我怎样才能做到这样呢?

标签 scope cmake

我的项目根目录中有一个 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/

相关文章:

javascript - 在与 ng-repeat 相同的标签上使用 ng-click 并使用来自 ng-repeat 范围的参数

c++ - 在使用 GLUT 时避免使用全局变量

eclipse - 使用 cmake 为 vxworks 构建 OPCUA

windows - 调用 "set"后,Cmake "find_path"对同一变量不起作用

VBA 私有(private)对象以相同形式超出范围

javascript - 在 JS 中扩展 PerformanceObserver 的范围

php - 我如何实例化我的数据库对象,以便在其他类中使用?

c - OS X : CMake ignores CMAKE_C_COMPILER

c++ - 如何通过 'emcc' 传递 'emcmake cmake/emmake make' 选项?

cmake ExternalProject缓存被覆盖