【问题标题】:CMake find_package() doesn't respect CMAKE_MODULE_PATHCMake find_package() 不尊重 CMAKE_MODULE_PATH
【发布时间】:2020-01-31 20:53:52
【问题描述】:

我在检测 CMake 中的包 (glfw) 时遇到问题。由于没有 root 权限,我无法将库安装在标准位置,因此我将其安装在 .local 中:

$ ls ~/.local/lib/cmake/glfw3/glfw3Config.cmake
/home/emil/.local/lib/cmake/glfw3/glfw3Config.cmake

我的CMakeLists.txt 包括

cmake_minimum_required(VERSION 3.10.0)
project(test VERSION 1.0 LANGUAGES C CXX)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "$ENV{HOME}/.local")
message("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
find_package(glfw3 3.2 REQUIRED)

我使用下面的标志执行以确保搜索目录输出:

$ cmake -DCMAKE_FIND_DEBUG_MODE=ON ..

这个输出:

CMAKE_MODULE_PATH: /home/emil/.local
Checking prefix [/]
Checking file [/glfw3Config.cmake]
Checking file [/glfw3-config.cmake]
Checking prefix [/usr/]
Checking file [/usr/glfw3Config.cmake]
Checking file [/usr/glfw3-config.cmake]
Checking prefix [/opt/thinlinc/]
Checking file [/opt/thinlinc/glfw3Config.cmake]
Checking file [/opt/thinlinc/glfw3-config.cmake]
Checking prefix [/usr/local/]
Checking file [/usr/local/glfw3Config.cmake]
Checking file [/usr/local/glfw3-config.cmake]
Checking prefix [/usr/bin/X11/]
Checking file [/usr/bin/X11/glfw3Config.cmake]
Checking file [/usr/bin/X11/glfw3-config.cmake]
Checking file [/usr/bin/X11/cmake/glfw3Config.cmake]
Checking file [/usr/bin/X11/cmake/glfw3-config.cmake]
Checking prefix [/snap/]
Checking file [/snap/glfw3Config.cmake]
Checking file [/snap/glfw3-config.cmake]
Checking prefix [/opt/puppetlabs/]
Checking file [/opt/puppetlabs/glfw3Config.cmake]
Checking file [/opt/puppetlabs/glfw3-config.cmake]
Checking prefix [/home/emil/]
Checking file [/home/emil/glfw3Config.cmake]
Checking file [/home/emil/glfw3-config.cmake]
Checking prefix [/usr/X11R6/]
Checking prefix [/usr/pkg/]
Checking prefix [/opt/]
Checking file [/opt/glfw3Config.cmake]
Checking file [/opt/glfw3-config.cmake]
CMake Error at CMakeLists.txt:13 (find_package):
  By not providing "Findglfw3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "glfw3", but
  CMake did not find one.

所以看起来 CMake 搜索了很多地方,包括我的主目录,但不在 ~/.local 中。我实际上不确定为什么。我认为CMAKE_MODULE_PATH 应该添加搜索目录。在我的另一台机器上,它会在那里查找并在运行相同的脚本时找到它。错误的机器运行 Ubuntu MATE 18.04 和工作的一台 Ubuntu 18.04。

CMake 版本如下。

$ cmake --version
cmake version 3.10.2

我知道我可以将文件移动到我的主目录,但我不想这样做。

【问题讨论】:

    标签: linux ubuntu cmake


    【解决方案1】:

    变量CMAKE_MODULE_PATH帮助定位FindXXX.cmake 脚本。

    用于定位 XXXConfig.cmake 脚本集 CMAKE_PREFIX_PATH 变量。 (或find_packagesearch algorithm 中使用的其他变量)。

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2021-05-09
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2012-11-30
      • 2018-09-08
      • 2019-12-20
      • 2016-02-02
      相关资源
      最近更新 更多