gpt4 book ai didi

cmake - 用PARENT_SCOPE设置的变量在相应的子作用域中为空。为什么?

转载 作者:行者123 更新时间:2023-12-04 01:46:36 57 4
gpt4 key购买 nike

考虑下面的最小示例:

.
├── bar
│   └── CMakeLists.txt
└── CMakeLists.txt


./CMakeLists.txt在哪里

project( foo )
cmake_minimum_required( VERSION 2.8 )

set( FOO "Exists in both, parent AND in child scope." )

add_subdirectory( bar )
message( STATUS "Variable BAR in ./ = ${BAR}" )
message( STATUS "Variable FOO in ./ = ${FOO}" )


并且 ./bar/CMakeLists.txt

set( BAR "Exists in parent scope only." PARENT_SCOPE )
message( STATUS "Variable BAR in ./bar/ = ${BAR}" )


cmake输出的相关部分是这样的:

...
-- Variable BAR in ./bar/ =
-- Variable FOO in ./bar/ = Exists in both, parent AND in child scope.
-- Variable BAR in ./ = Exists in parent scope only.
-- Variable FOO in ./ = Exists in both, parent AND in child scope.
...


由于变量 BAR放置在父作用域中,因此我希望它也可以在当前子作用域(及其后继作用域)中使用-就像变量 FOO一样,它被定义为父作用域首先。但是从以上几行可以看出
变量 BAR./bar/CMakeLists.txt中为空,这导致我
以下问题:

为什么修改后的父范围不能立即在子级中访问
范围, ./bar/?可以缓解吗?如果是,怎么办?如果没有,那是什么
解决方法?还是我完全缺少明显的东西?

上下文:我的项目由几个可执行文件和库组成。为一个
图书馆 bar,我想设置一个变量 bar_INCLUDE_DIR
被添加到任何相关可执行文件的包含路径,即 target_include_directories( my_target PUBLIC bar_INCLUDE_DIR )

最佳答案

上下文:我的项目由几个可执行文件和库组成。对于图书馆,例如bar,我想设置一个变量bar_INCLUDE_DIR,该变量将添加到任何依赖的可执行文件的包含路径中。


与在父作用域中设置变量相比,有一种更好的方法。 CMake允许目标指定依赖目标可以使用的包括目录,预处理器符号等。对于您的情况,可以使用target_include_directories

例如:

target_include_directories(my_target PUBLIC my_inc_dir)

关于cmake - 用PARENT_SCOPE设置的变量在相应的子作用域中为空。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29892929/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com