2017-05-22 65 views
1

我試圖構建一點代碼時遇到問題。 (我在Linux上)Eigen,make和cmake之間的問題(可能是cmake錯誤)

爲了使簡單:

以下是我在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 
    ) 

在項目目錄中,有兩個目錄:建立和艾根

要創建Makefile,我進入build目錄,然後輸入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

非常感謝您!第一個完美地工作=) 我沒有使用'finde_module',因爲我沒有成功編譯Eigen,並且因爲它沒有必要(Eigen只能使用頭文件)我沒花時間。 因此再次感謝您的幫助! – Tristan

+0

第二個是相當不錯的,因爲cmake有一個內置的模塊,它尋找Eigen並設置一個包含include目錄的變量。這意味着您的項目不依賴於駐留在特定位置(相對或絕對)的Eigen。這樣可以讓您將項目分發給其他人或將其安裝到另一臺具有其他操作系統的計算機上,只要Eigen安裝在合理的位置,cmake就會找到它。 – Stewart