如何为使用Eigen的C++项目编写makefile?Eigen是用于线性代数的C++模板库。

5

我正在使用Eigen库,它承诺矩阵操作向量化。我不知道如何使用Eigen提供的文件并编写makefile。使用Eigen的源文件包括以下列出的文件,这些甚至不是头文件(它们只是一些文本文件)-

<Eigen/Core>
<Eigen/Dense>
<Eigen/Eigen>

等等。在Eigen的网页上,提到为了使用它的函数,我不必构建项目,那么我该如何在我的makefile中包含这些文件以构建我的项目呢?我的示例main.c文件如下所示。有人能展示给我如何为这个文件编写一个makefile吗?

#include <Eigen/Core>

// import most common Eigen types 
USING_PART_OF_NAMESPACE_EIGEN

int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  std::cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << std::endl;
}

帮帮我!


你如何编译和链接它? - Draco Ater
4个回答

8
根据Eigen 网站的介绍,这是一个头文件库。
这意味着没有什么需要编译或链接。只要您在标准位置(* nix / Mac 上的/usr/local/include)中拥有头文件,则只需将该位置添加到预处理器构建步骤中即可。
假设您正在运行 * nix / Mac,并且假设您已将所有内容安装到默认位置(例如,#include <Eigen/Core> 引用文件 /usr/local/include/Eigen/Core),则 SUPER 简单的 makefile 如下:
main: main.cpp
    g++ -I /usr/local/include main.cpp -o main
  • main 依赖于 main.cpp
  • 使用 g++ 来生成 main,需要执行以下步骤:
    • 编译 main.cpp
    • 输出文件为 main
    • 在目录 /usr/local/include 中查找所有未知的头文件。

    注意:在 g++ 行前面有一个 TAB 键,而不是四个空格。

    希望这可以帮到您。


    2
    他们在文档中提到了这一点。
    g++ -I /path/to/eigen2/ my_program.cpp -o my_program 
    
    There is no library to link to. 
    

    看起来你只需要在Makefile文件中将模板(header)文件路径添加到你的包含目录中。


    1

    这些实际上是头文件。Eigen是一个模板库,遵循通用的模板实践,将定义和声明都包含在头文件中,而不是非模板实践将定义和声明分别存放在不同的文件中。当声明和定义分开时,您必须将包含定义的源文件构建为库对象文件,以便链接到程序中。

    仅通过包含Eigen头文件就可以完成此操作。

    只要您已经将Eigen头文件安装到系统的包含路径中,它们就会被编译进您的程序中,无需您进行任何自定义。如果您尚未将它们安装到您的包含路径中,只需像这样提供完整的路径给g++即可。

    g++ -I /path/to/eigen2/ source_file -o output_file
    

    0

    如果您需要一些Fortran库,这是我使用的命令

    g++ source.cpp -o output -I/../include -L/../lib -L/../lib64 -lcholmod -lmetis -lamd -lcamd -lccolamd -lcolamd -llapack -lgfortran -lblas

    我用..替换了实际路径


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接