2017-05-22 2 views
1

Ich stoße auf ein Problem, wenn ich versuche, ein wenig Code zu erstellen. (Ich bin auf Linux)Problem zwischen Eigen, make und cmake (wahrscheinlich ein Cmake-Fehler)

Um es einfach zu machen:

Hier ist, was ich in meiner Position.h Datei haben (bei der wirklich begining, ich glaube, die nächste nicht notwendig ist, dass zu lösen Ausgabe):

#include <Eigen/Dense> 

und hier meine CMakeLists.txt ist:

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

im Projektverzeichnis gibt es zwei Verzeichnisse: bauen und Eigen

Um das Makefile zu erstellen, gehe ich in das Build-Verzeichnis und tippe dann cmake ... Ein Makefile erstellt wird, aber wenn ich zu make versuchen bekam ich den Fehler:

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

Position.h ist aus einem Code von Github abgeholt (I können Sie den Link geben, wenn gewünscht).

Bitte, können Sie mir eine Richtung geben oder vielleicht zu suchen, wenn Sie sehen, was falsch ist, was mein Fehler

Dank ist!

Antwort

4

Sie können keine Headerabhängigkeit als Quelldateien in add_executable() angeben. Und wenn Position.h Suche Eigen/Dense Sie wahrscheinlich brauchen nur include_directories(.).

project(p) 

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

Aber warum verwenden Sie nicht find_module()?

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

Referenz

+0

Vielen Dank! das erste funktioniert einwandfrei =) Ich benutze 'finde_module' nicht weil ich nicht erfolgreich Eigen kompilieren konnte, und da es nicht nötig ist (Eigen kann nur mit Kopfzeilen arbeiten) brauchte ich keine Zeit. Also vielen Dank noch einmal für Ihre Hilfe! – Tristan

+0

Der zweite ist ziemlich nett, weil cmake ein eingebautes Modul hat, das nach Eigen sucht und eine Variable mit dem Include-Verzeichnis setzt. Dies bedeutet, dass Ihr Projekt nicht davon abhängig ist, dass Eigen an einem bestimmten Ort (relativ oder absolut) angesiedelt ist. Dadurch können Sie Ihr Projekt an jemand anderen verteilen oder es auf einem anderen Computer mit einem anderen Betriebssystem installieren. Solange Eigen an einem vernünftigen Ort installiert ist, wird CMake es finden. – Stewart

Verwandte Themen