【问题标题】:After CMake install, I can't find a package with `find_package`安装 CMake 后,我找不到带有 `find_package` 的包
【发布时间】:2018-11-14 04:42:21
【问题描述】:

我已经使用以下命令安装了一个库 (SDL):

cmake --build . --target install

我在文档中读到安装的软件包将在CMAKE_SYSTEM_PREFIX_PATH 中注册。

但是当我打印出变量时它是空的。

目前我用的是windows,网上看到应该在注册表中注册安装路径,但是一点用都没有。

如何使用 find_package() 找到例如 SDL?

【问题讨论】:

  • 目前我正在使用 windows 有时这意味着你必须告诉它在哪里查看。我使用提供 CMake 变量的批处理文件和环境变量来强制它选择我想要的版本。虽然这部分是由于我使用了超过 1 个版本的 Visual Studio 并结合了 32 位和 64 位的构建。
  • 查看 CMAKE_PREFIX_PATH,例如,stackoverflow.com/a/41909627/2799037
  • 我检查了它,但它没有按我的意愿工作。我在包注册表中添加了SDL2 2.0.8 : T:\installed\2.0.8\CMake,但是当我想包含 SDL2 包时,它说没有 FINDSDL2.cmake,尽管在本教程中github.com/Wigner-GPU-Lab/Teaching/tree/master/CMake/… 作者也没有查找脚本。
  • 我在 Windows 上安装和尝试使用 Google Benchmark 时遇到了同样的问题 - 为了解决这个问题,我使用了 CMAKE_PREFIX_PATH,所以我使用的命令是 cmake -DCMAKE_PREFIX_PATH="C:\Program Files" -G "Visual Studio 15 2017 Win64" .. 我认为它应该可以在没有但显然不是。我将继续挖掘,因为 CMake 确实将 Benchmark 安装到了正确的位置,所以它一定是某个地方的默认值! :P

标签: c++ build cmake libraries


【解决方案1】:

试试这个:

使用 get_cmake_property 函数将打印以下循环 列出所有定义的 CMake 变量及其值:

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

打印环境变量使用CMake的命令模式:

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")

打印出来:

-- CMAKE_SYSTEM_PREFIX_PATH=/usr/local;/usr;/;/usr;/usr/local;/usr/X11R6;/usr/pkg;/opt

(感谢Sakra

您可以在源代码树中搜索名为 FindSDL*.cmake 的文件,然后尝试在您的 CMAKE_SYSTEM_PREFIX_PATH 目录中找到该文件。

如果CMAKE_SYSTEM_PREFIX_PATH 仍然为空,请尝试在您的整个计算机中找到FindSDL*.cmake,以检查文件是否安装在cmake 知道的某个位置或尝试将此路径附加到您的CMAKE_SYSTEM_PREFIX_PATH

您也可以查看此链接:Using SDL2 with CMake

【讨论】:

    【解决方案2】:

    我认为这对您不起作用的原因是您的 find_package 命令在您的 CMakeLists.txt 文件中位于您的 project 命令之前。如果您确保project 是第一个命令(在cmake_minimum_required(VERSION <NUM> 之后),那么所有CMAKE_SYSTEM_*** 变量都将被正确初始化:)

    在遇到完全相同的问题后,我实际上偶然发现了这篇文章(请参阅我对最初问题的评论)。我尝试了 j4x 发布的建议,使用 foreach VARIABLES 命令打印所有变量,并在我的 project 命令之后偶然粘贴了它。我注意到 CMAKE_SYSTEM_PREFIX_PATH 是一个合理的值 - 然后我将代码移到 project 命令上方,并注意到打印的变量要少得多:P CMAKE_SYSTEM_PREFIX_PATH 无处可寻...

    我希望这对你也有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多