GTKmm 的 CMake 错误 - 找不到包 'gtkmm-3.0'

Posted

技术标签:

【中文标题】GTKmm 的 CMake 错误 - 找不到包 \'gtkmm-3.0\'【英文标题】:CMake error with GTKmm - No package 'gtkmm-3.0' foundGTKmm 的 CMake 错误 - 找不到包 'gtkmm-3.0' 【发布时间】:2018-02-05 14:01:28 【问题描述】:

可能与我的previous question有关。

我从“简单示例”here 复制了代码。

我从here复制了cmake指令。

我得到的错误是:

-- Checking for module 'gtkmm-3.0'
--   No package 'gtkmm-3.0' found
CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.10)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring done
-- Generating done
-- Build files have been written to: /path-to-files/

这是我的 CMakeLists.txt

project(SimpleExample)

find_package(PkgConfig REQUIRED)

set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/pkgconfig;/usr/share/pkgconfig")

pkg_check_modules(GTKMM gtkmm-3.0)

link_directories($GTKMM_LIBRARY_DIRS)
include_directories($GTKMM_INCLUDE_DIRS)

add_executable(SimpleExample SimpleExample.cpp)

target_link_libraries(SimpleExample $GTKMM_LIBRARIES)

set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/pkgconfig;/usr/share/pkgconfig") 这里有一条非常愚蠢的线,我很确定它不应该在那里,但是在我之前的问题中,我一直在努力弄清楚为什么 pkg-config 没有找到正确的位置gtkmm-3.0.pc 文件。

所以我进行了搜索,试图找出如何在 CMake 文件中手动设置 pkg-config 的路径。这就是我想出的。但是它不起作用。

【问题讨论】:

为什么不按照警告信息,在CMakeLists.txt 的顶部添加一行cmake_minimum_required(VERSION 3.0)?此警告消息比构建日志的其他部分加起来还要长... @Tsyvarev 因为它与问题无关?但是我已经添加了它,无论如何。 【参考方案1】:

CMake变量CMAKE_PREFIX_PATH环境变量PKG_CONFIG_PATH表示不同的路径

CMAKE_PREFIX_PATH 指向一个或多个程序的安装前缀

PKG_CONFIG_PATH 指向.pc 文件的位置

当 CMake 想通过 pkg_check_modules 命令调用 pkg-config 时,它会将 CMAKE_PREFIX_PATH 变量的内容通过 附加 sufficies 转换为 PKG_CONFIG_PATH CMAKE_PREFIX_PATH 变量中的每个路径(参见 FindPkgConfig.cmake 中的分支 if(NOT "$_extra_paths" STREQUAL "")):

lib/pkgconfig share/pkgconfig lib32/pkgconfiglib32/pkgconfig 对于某些发行版 其他一些特定于系统的功能

如您所见,您可以使用 CMAKE_PREFIX_PATH 中的/usr 获取 PKG_CONFIG_PATH 中的/usr/share/pkgconfig

但是在PKG_CONFIG_PATH中获取/usr/lib/x86_64-linux-gnu/pkgconfig是非常有问题的。

在任何情况下,描述主机系统本身的参数通常通过环境或cmake 参数传递,而不是通过项目的CMakeLists.txt。在给定的情况下命令行

export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig"

比设置CMAKE_PREFIX_PATH CMake 变量更简单(且可靠)。

【讨论】:

以上是关于GTKmm 的 CMake 错误 - 找不到包 'gtkmm-3.0'的主要内容,如果未能解决你的问题,请参考以下文章

CMake - 找不到“QT”提供的包配置文件

VSCode 找不到包,但 CLion 可以(CMake)

cmake 找不到“OPENCV”提供的包配置文件

CMake 问题 - 找不到“OpenCV”提供的包配置文件

OSX Yosemite 10.10.3 上的 Cmake - GLEW:找不到包“gl”

CMake 错误:包含找不到加载文件:目标