CMake find_package()不尊重CMAKE_MODULE_PATH [英] CMake find_package() doesn't respect CMAKE_MODULE_PATH

查看:114
本文介绍了CMake find_package()不尊重CMAKE_MODULE_PATH的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法在CMake中检测到软件包(glfw).由于没有root权限,我无法在标准位置安装该库,因此我将其安装在 .local 中:

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

我的 CMakeLists.txt

组成

  cmake_minimum_required(版本3.10.0)项目(测试版本1.0语言C CXX)设置(CMAKE_MODULE_PATH $ {CMAKE_MODULE_PATH}"$ ENV {HOME}/.local")消息("CMAKE_MODULE_PATH:$ {CMAKE_MODULE_PATH}")find_package(需要glfw3 3.2) 

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

  $ cmake -DCMAKE_FIND_DEBUG_MODE = ON .. 

这将输出:

  CMAKE_MODULE_PATH:/home/emil/.local检查前缀[/]检查文件[/glfw3Config.cmake]检查文件[/glfw3-config.cmake]检查前缀[/usr/]检查文件[/usr/glfw3Config.cmake]检查文件[/usr/glfw3-config.cmake]检查前缀[/opt/thinlinc/]检查文件[/opt/thinlinc/glfw3Config.cmake]检查文件[/opt/thinlinc/glfw3-config.cmake]检查前缀[/usr/local/]检查文件[/usr/local/glfw3Config.cmake]检查文件[/usr/local/glfw3-config.cmake]检查前缀[/usr/bin/X11/]检查文件[/usr/bin/X11/glfw3Config.cmake]检查文件[/usr/bin/X11/glfw3-config.cmake]检查文件[/usr/bin/X11/cmake/glfw3Config.cmake]检查文件[/usr/bin/X11/cmake/glfw3-config.cmake]检查前缀[/snap/]检查文件[/snap/glfw3Config.cmake]检查文件[/snap/glfw3-config.cmake]检查前缀[/opt/puppetlabs/]检查文件[/opt/puppetlabs/glfw3Config.cmake]检查文件[/opt/puppetlabs/glfw3-config.cmake]检查前缀[/home/emil/]检查文件[/home/emil/glfw3Config.cmake]检查文件[/home/emil/glfw3-config.cmake]检查前缀[/usr/X11R6/]检查前缀[/usr/pkg/]检查前缀[/opt/]检查文件[/opt/glfw3Config.cmake]检查文件[/opt/glfw3-config.cmake]CMakeLists.txt:13(find_package)的CMake错误:通过在CMAKE_MODULE_PATH中不提供"Findglfw3.cmake",该项目具有要求CMake查找"glfw3"提供的程序包配置文件,但是CMake找不到一个. 

因此CMake似乎在很多地方搜索,包括我的主目录,但不在〜/.local 中搜索.我实际上不确定为什么.我认为 CMAKE_MODULE_PATH 应该添加搜索目录.在我的另一台计算机上,它看起来在那里并在运行相同脚本时找到它.错误的计算机将运行Ubuntu MATE 18.04,而正在运行的计算机将运行Ubuntu 18.04.

CMake版本如下.

  $ cmake --versioncmake版本3.10.2 

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

解决方案

变量 CMAKE_MODULE_PATH 仅帮助 查找 FindXXX.cmake 脚本./p>

要找到 XXXConfig.cmake 脚本,请设置 CMAKE_PREFIX_PATH 变量.(或

Which I execute with the flag below to ensure search directory output:

$ cmake -DCMAKE_FIND_DEBUG_MODE=ON ..

This outputs:

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.

So it seems like CMake searches in a lot of places, including my home directory, but not in ~/.local. I'm actually not sure why. I think CMAKE_MODULE_PATH is supposed to add search directories. On my other machine it looks there and finds it when running the same script. The erroneous machine runs Ubuntu MATE 18.04 and the working one Ubuntu 18.04.

CMake version is as below.

$ cmake --version
cmake version 3.10.2

I understand that I could just move the files to my home directory, but I don't want to do that.

解决方案

Variable CMAKE_MODULE_PATH helps only in locating FindXXX.cmake scripts.

For locate XXXConfig.cmake script set CMAKE_PREFIX_PATH variable. (Or some other variable used by find_package in search algorithm).

这篇关于CMake find_package()不尊重CMAKE_MODULE_PATH的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆