【问题标题】:Issue between Eigen, make and cmake (probably a cmake mistake)Eigen、make 和 cmake 之间的问题(可能是 cmake 错误)
【发布时间】:2017-05-22 14:16:29
【问题描述】:

我在尝试构建一点代码时遇到了问题。 (我在linux上)

为了简单起见:

这是我的 Position.h 文件中的内容(在真正开始时,我认为下一个不是解决该问题所必需的):

#include <Eigen/Dense>

这是我的 CMakeLists.txt:

project(p)
include_directories("./Eigen")
add_executable(
    p
    Eigen/Dense
    Position.h # wich requires Eigen/Dense
    Position.cpp
    #other files
    )

在项目目录中有两个目录:build和Eigen

要创建 Makefile,我进入 build 目录,然后输入 cmake ..。创建了一个 Makefile,但是当我尝试 make 时出现错误:

/path/to/Position.h:30:23: fatal error: Eigen/Dense: no such file or directory.

Position.h 来自从 github 获取的代码(如果需要,我可以给你链接)。

拜托,你能给我一个搜索的方向吗,或者如果你看到了什么问题,我的错误是什么

谢谢!

【问题讨论】:

    标签: c++ makefile cmake eigen


    【解决方案1】:

    您不能在add_executable() 中将标头依赖项作为源文件提供。如果Position.h 确实搜索Eigen/Dense,你可能只需要include_directories(.)

    project(p)
    
    include_directories(.)
    add_executable(
        p
        Position.cpp
        Position.h
        #other files
    )
    

    但是你为什么不使用find_module()呢?

    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
    find_package(Eigen3 REQUIRED)
    include_directories(${EIGEN3_INCLUDE_DIR})
    

    参考

    【讨论】:

    • 非常感谢!第一个工作完美=)我不使用finde_module,因为我没有成功编译Eigen,而且没有必要(Eigen 只能使用标题)我没有花时间。再次感谢您的帮助!
    • 第二个非常好,因为 cmake 有一个内置模块,它查找 Eigen 并使用包含目录设置一个变量。这意味着您的项目不依赖于驻留在特定位置(相对或绝对)的 Eigen。这将允许您将项目分发给其他人或将其安装在具有另一个操作系统的另一台计算机上,只要 Eigen 安装在合理的位置,cmake 就会找到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2021-08-18
    相关资源
    最近更新 更多