首页 文章

cmake变量范围,add_subdirectory

提问于
浏览
57

我的项目根目录中有一个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只知道全局变量,但显然情况并非如此......

1 回答

  • 89

    set命令的文档中所述,每个添加了 add_subdirectory 的目录或使用 function 声明的每个函数都会创建一个新范围 .

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

    要使 SOURCEFILES 赋值在项目的根文件夹中可见,请尝试:

    set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE)
    

相关问题