2017-05-22 31 views
1

少しのコードを作成しようとすると問題が発生します。それを簡単にするEigen、make、cmake(おそらくcmakeミス)の問題

(私はLinux上でよ):ここでは

は私が私のPosition.hファイル(に持っているもので、本当に初めに、私は次のことを解決する必要はないと思います問題):

#include <Eigen/Dense> 

そして、ここでは私のCMakeLists.txtです:プロジェクトディレクトリで

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

二つのディレクトリがあります:

0123を構築し、固有

Makefileを作成するには、ビルドディレクトリに入り、cmake ..と入力します。 Makefileの作成は、私はmakeしようとするとエラーを得ている:

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

Position.hがされているコードから(たい場合、私はあなたにリンクを与えることができます)githubのからピックアップ。

、あなたは私にあなたが間違っているかを見る場合は多分検索したりするための方向性を与えることができ、私のミスは

おかげものですしてください!

答えて

4

ヘッダー依存関係をソースファイルとしてadd_executable()に指定することはできません。 Position.hを検索するとEigen/Denseと表示される場合は、おそらくinclude_directories(.)が必要です。

project(p) 

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

しかし、なぜfind_module()を使用しないのですか?

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

リファレンス

+0

ありがとうございました!最初のものは完全に=) 私はEigenをコンパイルするのに成功しなかったので 'finde_module'を使用しません。また、必要ではないので(Eigenはヘッダーだけで動作します)、時間がかかりませんでした。 ご協力いただきありがとうございます。 – Tristan

+0

cmakeには、Eigenを探してインクルードディレクトリで変数を設定するモジュールが組み込まれているので、2番目のモジュールはとてもいいです。これは、あなたのプロジェクトが特定の場所(相対的または絶対的)に存在するEigenに依存していないことを意味します。これにより、プロジェクトを他の人に配布したり、別のOSをインストールした別のコンピュータにインストールしたり、Eigenが妥当な場所にインストールされている限り、cmakeが見つけます。 – Stewart