Как написать make-файл для проекта C ++, который использует Eigen, библиотеку шаблонов C ++ для линейной алгебры? - PullRequest
4 голосов
/ 19 июля 2010

Я использую библиотеку Eigen, которая обещает векторизацию матричных операций.Я не знаю, как использовать файлы, указанные в Eigen, и написать make-файл.Исходные файлы, использующие Eigen, включают файлы, перечисленные ниже, это даже не заголовочные файлы (это просто текстовые файлы) -

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

и так далее.На веб-странице Эйгена упоминается, что для того, чтобы использовать его функции, мне не нужно собирать проект, как я могу включить эти файлы в свой make-файл для сборки моего проекта.Мой пример файла main.c выглядит следующим образом. Может кто-нибудь показать мне, как написать make-файл для этого файла -

#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;
}

Помогите!

Ответы [ 4 ]

7 голосов
/ 19 июля 2010

Согласно веб-сайту Эйгена , это библиотека только для заголовков.

Это означает, что нет ничего, что можно скомпилировать или связать.Вместо этого, если у вас есть заголовочные файлы в стандартном расположении (/usr/local/include на * nix / Mac), все, что вам нужно сделать, это добавить это местоположение на шаг сборки препроцессора.

Предполагая, что выпод управлением * nix / Mac, и при условии, что у вас все установлено в каталогах по умолчанию (например, #include <Eigen/Core> ссылается на файл /usr/local/include/Eigen/Core), тогда простой make-файл SUPER будет выглядеть так:

main: main.cpp
    g++ -I /usr/local/include main.cpp -o main

Что говорит по-английски:

  • main зависит от main.cpp
  • , чтобы сделать main, используйте от g++ до
    • compile main.cpp,
    • выходной файл main,
    • ищет в каталоге /usr/local/include любые заголовки, о которых он не знает

ПРИМЕЧАНИЕ: перед строкой g++ стоит табуляция, а НЕ четыре пробела.

Надеюсь, это поможет.

1 голос
/ 19 июля 2010

Это фактически заголовочные файлы.Eigen - это библиотека шаблонов, и в соответствии с обычной практикой шаблонов все определения и объявления содержатся в заголовочных файлах, в отличие от практики, не связанной с шаблонами, для хранения определений и объявлений в отдельных файлах.Когда замедления и определения хранятся отдельно, вы должны встроить исходные файлы, содержащие определения, в объектные файлы библиотеки, которые будут связаны с вашей программой.

Это уже якобы сделано для вас просто путем включения заголовочных файлов Eigen.во-первых.

Пока вы установили заголовочные файлы Eigen в ваш системный включаемый путь, они будут скомпилированы в вашу программу без какой-либо настройки с вашей стороны.Если вы не установили их в свой путь включения, просто укажите полный путь к g ++, например ...

g++ -I /path/to/eigen2/ source_file -o output_file
1 голос
/ 19 июля 2010

Они имеют это в своей документации.

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

There is no library to link to. 

Кажется, вам просто нужно добавить путь к файлу шаблона (заголовка) в каталоги включения внутри вашего Makefile.

0 голосов
/ 19 июня 2011

Если вам нужна библиотека на фортране, вот команда, которую я использую

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

Я заменяю фактический путь на ..

...