0

可能与我之前的问题有关

我从此处的“简单示例”中复制了代码。

我从这里复制了 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文件的正确位置。

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

4

1 回答 1

1

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

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

  • PKG_CONFIG_PATH指向文件的位置.pc

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

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

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

但是/usr/lib/x86_64-linux-gnu/pkgconfigPKG_CONFIG_PATH中获取是非常值得怀疑的。

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

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

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

于 2018-02-05T15:40:09.163 回答