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/pkgconfig
或 lib32/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 问题 - 找不到“OpenCV”提供的包配置文件