繁体   English   中英

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

[英]How to write a makefile for a C++ project which uses Eigen, the C++ template library for linear algebra?

我正在使用特征库,它承诺矩阵运算的矢量化。 我不知道如何使用Eigen中给出的文件并编写一个makefile。 使用Eigen的源文件包括下面列出的文件,这些文件甚至不是头文件(它们只是一些文本文件) -

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

等等。 在Eigen的网页上,提到为了使用它的功能我不需要构建项目,那么如何在makefile中包含这些文件来构建我的项目。 我的示例main.c文件看起来像这样。 任何人都可以告诉我如何为这个文件编写一个makefile 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;
}

救命!

根据Eigen的网站 ,这是一个仅限标题的库。

这意味着没有任何东西可以编译或链接到它。 相反,只要您在标准位置( /usr/local/include on * nix / Mac)上有头文件,那么您所要做的就是将该位置添加到预处理器构建步骤中。

假设您正在运行* 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
  • 要使用main ,请使用g++
    • 编译main.cpp
    • 输出文件main
    • 在目录/usr/local/include查找它不知道的任何头文件

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

希望有所帮助。

他们在他们的文档中有这个。

g++ -I /path/to/eigen2/ my_program.cpp -o my_program 

There is no library to link to. 

您似乎只需要将模板(标题)文件路径添加到Makefile中的include目录中。

这些实际上是头文件。 Eigen是一个模板库,以下常见的模板实践包括头文件中的定义和声明,与非模板实践相关,即将定义和声明保存在单独的文件中。 当减速和定义保持独立时,必须将包含定义的源文件构建到要链接到程序中的库对象文件中。

这表面上只是通过首先包含Eigen头文件的行为来完成的。

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

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

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

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

我用..替换实际路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM