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

2023-12-03

我的项目根目录中有一个 CMakeLists.txt,我的 /src 文件夹中有一个 CMakeLists.txt。 /src 文件夹中的那个仅包含一个带有 .cpp 文件的变量(set (SOURCEFILES main.cpp foo.cpp))并在根 CMakeLists.txt 我做add_subdirectory(src)后来我这样做了add_executable(MyApp ${SOURCEFILES}).

但是 cmake 给了我错误

使用错误数量的参数调用 add_executable,没有来源 假如

我读到 CMake 只知道全局变量,但显然情况并非如此...我对 CMake 中的变量作用域如何工作来解释这一点缺少什么?知道了这一点,我如何让 CMake 看到该变量?


正如文档中提到的set命令,每个目录添加add_subdirectory或用以下声明的每个函数function创建一个新的范围。

新的子作用域继承其父作用域的所有变量定义。新子作用域中的变量赋值set命令仅在子作用域中可见,除非PARENT_SCOPE使用选项。

为了使SOURCEFILES分配在项目的根文件夹中可见,请尝试:

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐