我的项目根目录中有一个 CMakeLists.txt,我的 /src 文件夹中有一个。 /src 文件夹中的一个仅包含一个带有 .cpp 文件 (set (SOURCEFILES main.cpp foo.cpp)
) 的变量,并且在根 CMakeLists.txt 中我执行 add_subdirectory(src)
,然后我执行 add_executable(MyApp ${SOURCEFILES})
。
但是cmake给了我错误
add_executable 调用的参数数量不正确,未提供源
如何让 cmake 查看变量?我读到cmake只知道全局变量,但显然不是这样......
如 set 命令的文档中所述,使用 add_subdirectory
添加的每个目录或使用 function
声明的每个函数都会创建一个新范围。
新的子作用域从其父作用域继承所有变量定义。除非使用 PARENT_SCOPE
选项,否则使用 set
命令在新子范围内的变量分配将仅在子范围内可见。
要使 SOURCEFILES
分配在项目的根文件夹中可见,请尝试:
set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE)
${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp
而不仅仅是foo.cpp
,因为 cmake 现在位于父范围内。set(VAR value PARENT_SCOPE); set(VAR ${VAR});
set(VAR value PARENT_SCOPE); set(VAR ${VAR});
不起作用,但是,set(VAR value); set(VAR ${VAR} PARENT_SCOPE);
有效。get_directory_property(VAR1 DIRECTORY subdir1 DEFINITION VAR1)