CMake中设置变量的作用域问题记录

在CMakeLists.txt中,我们通常会去使用set或者option去设置环境变量。而设置这些变量的作用域是向下传递的。这样就会遇到一个问题。
--root
    -A
        -CMakeLists.txt
    -B
        -CMakeLists.txt
   -CMakeLists.txt

如果在root下面的CMakeLists.txt中

add_subdirectory(A)
add_subdirectory(B)

这时A在A中使用set或者option去设置变量控制B,会发现变量在B中并没有生效。

解决方法

1、set(变量 变量值 PARENT_SCOPE),加上PARENT_SCOPE就可以在B中访问A中设置的变量
2、在A中CMakeLists.txt中加入add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../B ../B),将B作为A的子项目。
3、将变量放到root下面的CMakeLists.txt中去设置。

posted @ 2022-09-27 19:56  cyssmile  阅读(375)  评论(0)    收藏  举报