2017-05-22 3 views
1

Je rencontre un problème en essayant de construire un peu de code. (Je suis sur linux)Problème entre Eigen, make et cmake (probablement une erreur cmake)

Pour faire simple:

Voici ce que j'ai dans mon dossier de Position.h (au début vraiment, je pense que la prochaine n'est pas nécessaire de résoudre ce numéro):

#include <Eigen/Dense> 

et voici mon CMakeLists.txt:

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

Dans le répertoire du projet il y a deux répertoires: construire et Eigen

Pour créer le Makefile, je vais dans le répertoire de construction, puis, tapez cmake ... Un Makefile est créé, mais lorsque je tente de make i a l'erreur:

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

Position.h est d'un code pris de GitHub (je peux vous donner le lien si désiré).

S'il vous plaît, pouvez-vous me donner une direction à la recherche ou peut-être si vous voyez ce qui est mal, ce qui est mon erreur

Merci!

Répondre

4

Vous ne pouvez pas définir une dépendance d'en-tête en tant que fichiers sources dans add_executable(). Et si Position.h fait une recherche Eigen/Dense vous avez probablement juste besoin de include_directories(.).

project(p) 

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

Mais pourquoi n'utilisez-vous pas find_module()?

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

Référence

+0

Merci beaucoup! le premier fonctionne parfaitement =) Je n'utilise pas 'finde_module' parce que je n'ai pas réussi à compiler Eigen, et comme ce n'est pas nécessaire (Eigen ne peut fonctionner qu'avec des en-têtes), je n'ai pas pris le temps. Alors merci encore pour votre aide! – Tristan

+0

Le second est assez sympa parce que cmake a un module intégré qui recherche Eigen et définit une variable avec le répertoire include. Cela signifie que votre projet ne dépend pas de l'Eigen résidant dans un endroit spécifique (relatif ou absolu). Cela vous permettra de distribuer votre projet à quelqu'un d'autre ou de l'installer sur un autre ordinateur avec un autre système d'exploitation et aussi longtemps que Eigen sera installé dans un endroit raisonnable, cmake le trouvera. – Stewart