【问题标题】:pkg_check_modules cannot find *.pc.cmakepkg_check_modules 找不到 *.pc.cmake
【发布时间】:2015-09-12 22:38:40
【问题描述】:

我正在使用第 3 方库 rbdl,其中包含 rbdl.pc.cmake,“我想”包含在 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 开始被 pkg_check_modules 接受,在进行复制、重命名副本和手动运行 pkg-config 的调整之后?

【问题讨论】:

  • 您使用什么版本的 CMake? CMake 3.1 中的 pgk-config 有一些改进。
  • @usr1234567 我使用的是 2.8。会不会是这个原因?
  • 如果可能,请使用 CMake 3.1 或更高版本,因为这些版本改进了 pkg-config 功能。

标签: cmake pkg-config


【解决方案1】:

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

pkg-config 是愚蠢的 不要以任何方式解释或验证编译器/链接器标志,因此您重命名的文件“有效”(是的,为编译器生成 invalid 命令行/链接器)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2011-01-21
    • 2012-04-30
    • 1970-01-01
    • 2012-01-24
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多