基于thread "cmake variable scope, add_subdirectory" , CMake set命令将仅在当前范围内设置变量,除非 PARENT_SCOPE
指定参数。
最近我在看 project命令,每个 CMake 文档,变量 <PROJECT-NAME>_SOURCE_DIR
和 <PROJECT-NAME>_BINARY_DIR
将被设置。但它没有提到这些变量的范围是什么。这些变量可以在其他子目录中使用吗?例如:
|- root
| |- CMakeLists.txt // add_subdirectory(proj1); add_subdirectory(proj2)
| |
| |- proj1
| | |- CMakeLists.txt // project(proj1)
| |
| |- proj2
| | |- CMakeLists.txt // Does this have access to proj1_SOURCE_DIR or
// poj1_BINARY_DIR?
其他命令的变量怎么样Find_Package
? <Module>_FOUND
的范围是什么?多变的?谢谢!
最佳答案
我通过仔细查看 cmake 源代码找到了答案。项目命令实际上是在顶层设置缓存条目。这样,$proj1_SOURCE_DIR
和 $proj1_BINARY_DIR
将可用于其他同级作用域。
总之,对于命令项目(proj1),cmake 将执行:
设置(proj1_SOURCE_DIR,缓存静态“”)
设置(proj1_BINARY_DIR,缓存静态“”)
与常规 set(var value)
不同,缓存条目可以由其他同级作用域共享。
关于c++ - CMake <PROJECT-NAME>_SOURCE_DIR 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47681402/