2012-04-02 90 views
5

我遇到麻煩,包括cmake項目下的測試。我的項目設置了這樣的:cmake包括來自其他目錄的h文件

         TerrainMap 
             / \ 
         PointAccumulator  heightQuadGrid 
               \ 
               Test 

在TerrainMap目錄中的CMakeLists.txt文件簡單地概述了cmake的版本,項目名稱,包括兩個子目錄。

在heightQuadGrid中的CMakeLists.txt看起來是這樣的:

cmake_minimum_required(VERSION 2.8) 

find_package(PCL 1.2 REQUIRED) 
find_package(OpenCV REQUIRED) 

include_directories(${PCL_INCLUDE_DIRS}) 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 

add_library(heightQuadGrid heightQuadGrid.cpp) 

add_subdirectory(Test) 

其按照我的理解,使一個名爲heightQuadGrid庫。該在的CMakeLists.txt測試看起來是這樣的:

FIND_PACKAGE(PCL 1.2 REQUIRED) 
FIND_PACKAGE(OpenCV REQUIRED) 
FIND_PACKAGE(Boost COMPONENTS unit_test_framework REQUIRED) 

include_directories(${PCL_INCLUDE_DIRS}) 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 

link_libraries(heightQuadGrid) 

add_executable(heightQuadTreeTest heightQuadGridTest.cpp) 
target_link_libraries (heightQuadTreeTest heightQuadGrid ${PCL_LIBRARIES} ${OpenCV_LIBS} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) 

最後cpp文件heightQuadGridTest.cpp有這個包括:

#include <heightQuadGrid/heightQuadGrid.h> 

CMake的正常工作,但是當我去使項目它告訴我無法找到heightQuadGrid/heightQuadGrid.h

什麼是我看到的另一個工作項目中非常類似的方法?

回答

3
#include <heightQuadGrid/heightQuadGrid.h> 

這句法表明,其中的「包含目錄」的項目應該是heightQuadGrid目錄上面的目錄。在爲heightQuadTreeTest可執行的CMakeLists.txt文件,你需要去兩個目錄,並補充說,作爲一個包括目錄:

include_directories(../../) 
+0

不,我不這麼認爲,我這表示我試圖讓來自圖庫heightQuadGrid的heightQuadGrid.h,我已正確鏈接。 – 2012-04-03 01:59:33

+1

糾正我,如果我錯了(我沒有你的目錄結構在我的機器上),但「適當鏈接」告訴*鏈接器*在哪裏看... include目錄告訴*編譯器*在哪裏看。 – tmpearce 2012-04-03 02:30:09

+0

好吧我想我明白你的意思,但我需要包括2個目錄或只有一個到heightQuadGrid.h是哪裏? 然後,我如何將它包含在我的cpp文件中,這樣我就完成了? – 2012-04-03 04:01:25