cmake - CMake 可以告诉我 find_package() 使用哪个模块或配置文件吗?

标签 cmake

我有时发现自己想知道哪个Find<package>.cmake CMake 实际使用的文件。 例如我有两个 FindOpenMP.cmake我的系统上有多个文件,我想知道使用了哪一个(如果有的话)

find_package(OpenMP)

CMake 可以打印用于解析 find_package() 的模块文件的位置打电话?

我正在使用 CMake 3.18.2。

最佳答案

配置模式

如果 CMake 使用 config 脚本(FooConfig.cmakeconfig-foo.cmake)来处理 find_package(Foo) 请求,然后设置:

  1. Foo_DIR cache 变量指向脚本所在的目录。 您可以在项目外部的构建目录中创建的 CMakeCache.txt 文件中检查此变量。

  2. Foo_CONFIG 变量包含脚本的绝对路径。 您可以在 find_package() 调用之后在 CMakeLists.txt 中打印此变量的内容。

模块模式

如果 CMake 使用 module 脚本 (FindFoo.cmake) 处理 find_package(Foo) 请求,则它不会设置指向脚本。

但是此类脚本的搜索过程非常简单:

  1. CMake 首先检查包含模块的目录,这些模块是由 CMake 本身附带的。
  2. CMake 按顺序迭代 CMAKE_MODULE_PATH CMake 变量中列出的目录,并在找到具有预期名称的第一个文件 (FindFoo.cmake) 后停止>).

也就是说,您可以打印 CMAKE_MODULE_PATH 变量的值,并手动(或通过其他脚本)迭代该值并找到包含所需脚本的第一个目录。

关于cmake - CMake 可以告诉我 find_package() 使用哪个模块或配置文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63991622/

相关文章:

gcc - 纳米: File format not recognized

c++ - 自 Mojave 以来,链接在 Homebrew 软件的 cmake 中不起作用

c++ - 错误 : ‘hour’ was not declared in this scope

gradle - 使用 gradle 构建 cmake ExternalProject

c++ - 在 Windows 上使用 CMake 2.8.11 构建自定义 Qt 4.8.3 库时出错

Android NDK Cmake 链接 .a(静态)库

c++ - cmake force config=库的发布

CMake如何包含头文件以便它们可以与尖括号一起使用?

c++ - 在构建我们的源代码之前,如何使用 cmake 检查某些库是否存在?

c++ - Windows C++ GUI 应用程序