c++ - CMake <PROJECT-NAME>_SOURCE_DIR 变量作用域

标签 c++ variables cmake

基于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 将可用于其他同级作用域。

https://github.com/Kitware/CMake/blob/420874bfaa20772525c60b20d1ee5b6ef5ed9298/Source/cmProjectCommand.cxx#L30-L40

总之,对于命令项目(proj1),cmake 将执行: 设置(proj1_SOURCE_DIR,缓存静态“”) 设置(proj1_BINARY_DIR,缓存静态“”)

与常规 set(var value) 不同,缓存条目可以由其他同级作用域共享。

关于c++ - CMake <PROJECT-NAME>_SOURCE_DIR 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47681402/

相关文章:

循环中指向int的C++指针?

c++ - C++中的变量和引用之间有什么区别?

ruby - 模块的实例变量是否在类与 mixin 之间共享?

c++ - 使用 CMake 链接到 Windows 上的静态库时出现问题

c++ - 将项目与静态构建 curl 链接

c++ - 为什么不允许静态常量 float ?

C++按: hasNextLine?行读取文件

c++ - 如何编写 C 或 C++ 程序来充当内存和 CPU 周期填充器?

php - 如何将此变量添加到此代码?

android - 如何为 Android 创建电视调谐器库?