我有时发现自己想知道哪个Find<package>.cmake
CMake 实际使用的文件。
例如我有两个 FindOpenMP.cmake
我的系统上有多个文件,我想知道使用了哪一个(如果有的话)
find_package(OpenMP)
CMake 可以打印用于解析 find_package()
的模块文件的位置打电话?
我正在使用 CMake 3.18.2。
最佳答案
配置模式
如果 CMake 使用 config 脚本(FooConfig.cmake
或 config-foo.cmake
)来处理 find_package(Foo)
请求,然后设置:
Foo_DIR
cache 变量指向脚本所在的目录。 您可以在项目外部的构建目录中创建的CMakeCache.txt
文件中检查此变量。Foo_CONFIG
变量包含脚本的绝对路径。 您可以在find_package()
调用之后在CMakeLists.txt
中打印此变量的内容。
模块模式
如果 CMake 使用 module 脚本 (FindFoo.cmake
) 处理 find_package(Foo)
请求,则它不会设置指向脚本。
但是此类脚本的搜索过程非常简单:
- CMake 首先检查包含模块的目录,这些模块是由 CMake 本身附带的。
- CMake 按顺序迭代
CMAKE_MODULE_PATH
CMake 变量中列出的目录,并在找到具有预期名称的第一个文件 (FindFoo.cmake
) 后停止>).
也就是说,您可以打印 CMAKE_MODULE_PATH
变量的值,并手动(或通过其他脚本)迭代该值并找到包含所需脚本的第一个目录。
关于cmake - CMake 可以告诉我 find_package() 使用哪个模块或配置文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63991622/