pkg_check_modules 找不到 *.pc.cmake

pkg_check_modules cannot find *.pc.cmake

我正在使用第 3 方库 rbdl,其中包含 rbdl.pc.cmake,其中 'I suppose' 用于在 cmake 文件中使用 pkg_check_modules

我更新 PKG_CONFIG_PATH 以指向 rbdl 文件夹

set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_BINARY_DIR}/externals/rbdl")
pkg_check_modules(RBDL rbdl)

但是pkg_check_modules说找不到模块。

当我手动复制rbdl.pc.cmake时,在终端中将副本重命名为rbdl.pc和运行 pkg-config --cflags --libs rbdl,然后我的cmake也开始工作了!

有趣的是,现在即使我删除 rbdl.pc,如果 rbdl.pc.cmake 完美找到了 rbdl 模块!

所以我的问题是:

  1. *.pc和*.pc.cmake有什么区别?
  2. 如何正确设置我的 cmake 以使用原始 rbdl.pc.cmake?
  3. 为什么 rbdl.pc.cmake 在通过复制、重命名副本和手动 运行ning pkg-config 进行调整后开始被 pkg_check_modules 接受?

你理解错了! rbdl.pc.cmake 只是一个模板文件。它不应该被你使用!查看用于呈现变量的 CMakeLists.txt160 -- configure_file()(模板文件中 @ 的 "quoted")并生成 rbdl.pc(真正的 pkg-config) 文件。应安装后者(以某种方式),然后可供 pkg-config 使用,因此可用于您的项目。

pkg-config 是愚蠢的 不要以任何方式解释或验证 compiler/linker 标志,所以你重命名的文件 "works" (是的,产生 无效 compiler/linker) 的命令行。

我希望您在尝试使用它编写代码之前阅读 CMake 文档!它将节省您的时间并为您提供必要的知识,从而阻止您做 愚蠢的事情,就像您在问题中描述的那样;-)