【问题标题】:Cmake find_package does not detect path in windowsCmake find_package 未检测到 Windows 中的路径
【发布时间】:2021-10-02 18:18:42
【问题描述】:

我正在尝试使用 Cmake_gui 和 Visual Studio 构建 ceres sovler

我已将 ceres-solver 克隆到 E:\Code\libs\ceres-solver 并将所需的库 Eigen3 克隆到 E:\Code\libs\eigen-3.3.9

当我在 ceres-solver 上运行 cmake-gui 时,我收到以下错误:

-- Detected available Ceres threading models: [CXX_THREADS, OPENMP, NO_THREADS]
-- Building with C++14
CMake Error at CMakeLists.txt:242 (find_package):
  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.

  Could not find a package configuration file provided by "Eigen3" (requested
  version 3.3) with any of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.

我修改了 ceres CMakeLists.txt 第 241 行 来自:

find_package(Eigen3 3.3 REQUIRED)

find_package(Eigen3 3.3 REQUIRED PATH "E:/Code/libs/eigen-3.3.9")

但我仍然在上面得到这个错误

我也试过

list(APPEND CMAKE_PREFIX_PATH "E:/Code/libs/eigen-3.3.9")

set(Eigen3_DIR "E:/Code/libs/eigen-3.3.9")

我的问题是:

  1. 为 find_package 指定路径的正确方法是什么?需要在windows中使用path环境变量还是修改CMakeLists.txt?

  2. 我是否在 Windows 中正确指定了此路径?我需要链接到 Eigen3 的一些内部目录吗?像E:\Code\libs\eigen-3.3.9\cmake 一样,使用正斜杠而不是反斜杠,还是使用引号作为路径?我尝试了所有这些方法都没有成功。

  3. find_package 是否递归搜索指定目录中的包?还是我需要指向确切的目录?

谢谢

【问题讨论】:

  • 只是为了确保,但指定的目录包含构建的库,而不仅仅是Eigen3的克隆源
  • 只是源代码,我认为 CMake 会将所有内容构建到 1 个项目中
  • find_package 搜索已构建的 cmake 包而不是源代码。我认为有一种方法可以将它与主项目一起构建,但我不确定如何配置它。
  • 您需要使用CMake生成项目并为您单独构建Eigen3。您也可以使用 vcpkg 来帮助您:https://github.com/microsoft/vcpkg

标签: c++ windows cmake ceres-solver


【解决方案1】:

根据cmets:

我必须先在 Eigen3 上运行 Cmake-Gui,以生成 Build 目录。但是,它确实不一定以后一定需要在VS中构建,

然后在 CMakeLists.txt 的第 240 行设置 ceres-solver

list(APPEND CMAKE_PREFIX_PATH "E:/Code/libs/eigen-3.3.9/build")

足以让 Cmake-Gui 找到 Eigen3Config.cmake 文件

注意事项:

  1. Eigen3 似乎没有任何必需的依赖项,但在使用 Cmake-Gui 生成时确实会引发很多警告,我忽略了这些
  2. glog 库或任何其他库不是必需的,但我确实必须检查“启用 mini-glog”选项并重新运行 ceres-solver 的配置。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2018-09-23
    • 1970-01-01
    • 2018-11-18
    • 2019-07-30
    • 1970-01-01
    • 2012-04-14
    • 2020-08-20
    • 2016-01-19
    相关资源
    最近更新 更多