https://cmake.org/cmake/help/latest/command/set.html#command:setcmake.org/cmake/help/latest/command/set.html#command:set 经过测试,下面这样做意义不大,这要求同名变量存在,使得编码极其的不优雅: cmake ../ 有: 也就是: -- in parent aaa 1 = -- in function : xxx = aaa -- in paren...
所以${CMAKE_CURRENT_SOURCE_DIR}/fadd.cpp就是fadd.cpp的绝对路径。那最后的PARENT_SCOPE代表什么呢?记得我们之前说过,add_subdirectory创建了变量访问的层级关系,子目录可以读取父目录的变量,但是父目录的CMakeLists.txt无法读取子目录的变量。PARENT_SCOPE就是让子目录的变量可以在直接父目录可以访问,这样方便把文件...
通过使用具有GLOBAL作用域的属性,可以“模拟”GLOBAL变量的行为:
通过使用具有GLOBAL作用域的属性,可以“模拟”GLOBAL变量的行为:
如果存在PARENT_SCOPE,则将在当前作用域的上一个作用域中设置变量。每个新目录或函数都将创建一个新...
PARENT_SCOPE使用 CMake定义变量时,附加PARENT_SCOPE的主要作用是表明变量的作用范围,是一个可选项。在不同层级(可以理解为不同文件夹下的CMakeLists.txt)下,下级可以使用上级中已经定义好的变量,加上PARENT_SCOPE限定,说明此处使用的变量在上一层已经定义过,实际不加限定也可以使用。
如果存在PARENT_SCOPE,则将在当前作用域的上一个作用域中设置变量。每个新目录或函数都将创建一个新...
CMake中变量的类型有多种:通过set设置的普通变量和缓存变量、环境变量、数组变量等等,由于CMake在生成的过程中会加载缓存的关系,因此用法不一样。 常用的变量设置语法: 代码语言:txt 复制 set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE]) ...
在 函数中修改值,那么也是用 set($ 888 PARENT_SCOPE)。此时,退出函数第二次打印变量值时。该值就是在函数中修改好的值 888。本质讲,对于 function() 而言,刚刚说到的父目录其实不是严格正确的。因为函数定义可以是在其他 .cmake 模块文件中定义的。也可以在其他 CMakeLists.txt 文件中调用,因此准确的说,...
以根目录 CMake 文件为父目录,src 目录为子目录,此时子目录 CMake 文件会拷贝一份父目录文件的 Normal 变量。需要说明的是,我们在子目录中如果想要修改父目录 CMake 文件包含的 Normal 变量。必须通过 set(... PARENT_SCOPE) 的方式。下面通过例子来说明。