CMake在不同目录间传值

一般用[set]命令定义的变量能从父目录传递到子目录,而不能传递到父目录。这里不讨论从父目录到子目录传值的情况,因为一般的方法都可以。下面主要介绍在子目录传值到父目录以及在子目录间传值的情况

方法一:

要用set(variable value CACHE INTERNAL docstring )这种方式定义的变量会把变量加入到CMakeCache.txt然后各级目录共享会访问到这个变量
比如:
在目录1的CMakeLists.txt中定义一个变量

 set(Var1 "firest" CACHE INTERNAL "description words" )
//"description words"这个字符串相当于对变量的描述说明,不能省略,但可以自己随便定义

在目录2下的CMakeLists.txt中读取这个一个变量

MESSAGE(STATUS "Var1 :${Var1}")

每次运行cmake都会更新这个变量,你会在CMakeCache.txt中找到这个变量

这种方法可以在不同目录之间传值,适应性较强,因为是通过读写缓存文件(CMakeCache.txt)来实现的

方法二

使用 PARENT_SCOPE 关键字
用 PARENT_SCOPE 声明的变量的生命空间在父目录,而不在当前目录,例如

set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)

如果想在当前目录和父目录都可以访问,则可以

set (LIB_VER 6)
set (LIB_VER ${LIB_VER} PARENT_SCOPE)

参考链接
【1】 https://blog.csdn.net/10km/article/details/50508184
【2】https://stackoverflow.com/questions/34028300/set-a-variable-in-current-scope-and-parent-scope
其他CMake的参考
http://wiki.ros.org/catkin/CMakeLists.txt
学习
https://elloop.github.io/tools/2016-04-10/learning-cmake-2-commands
推荐
http://www.hahack.com/codes/cmake/

你可能感兴趣的:(CMake在不同目录间传值)