2017-10-05 76 views
1

使用cmake與ROS,一個可以結束了一個目錄樹是這樣的:查找源根目錄中的CMake的ROS

+src 
    -CMakeLists.txt (symbolic link to toplevel.cmake) 
    -CMakeExtras.txt (I want to use this) 
    +computing 
    +perception 
     +per1 
     -CMakeLists.txt 
     +per2 
     -CMakeLists.txt 
    +detection 
     +det1 
     -CMakeLists.txt 
    +sensing 
    +dev1 
     -CMakeLists.txt 

CMakeExtras.txt我想成立CMake的變量,加載通用包剛一旦等例如像:

set(CMAKE_CXX_FLAGS "-O3 -Wall ${CMAKE_CXX_FLAGS}") 
find_package(Boost REQUIRED COMPONENTS thread) 

我怎樣才能做到這一點? INCLUDE()命令是顯而易見的,但我無法編輯根級別CMakeLists.txt,似乎沒有一個變量可以允許類似INCLUDE("${OVERALL_SRC_DIR}/CMakeExtras.txt)之類的變量。我想:

catkin_make -DOVERALL_SRC_DIR=~/project/src 

會是一個解決方案,但有沒有更好的方法?

+0

不太熟悉ROS,所以你的問題聽起來有點不清楚。如果你不能編輯頂級的'CMakeLists.txt',你想在哪裏放置'include($ {OVERALL_SRC_DIR} /CMakeExtras.txt)?或者你可以? – Massimiliano

+0

儘管我擁有107個東西,但我仍然可以手動將其放入每個'CMakeLists.txt'中。不過,我想避免爲每個文件定製路徑。編寫自定義規則也可能是另一種方法? –

回答

1

免責聲明:這個問題對我來說還是有點不清楚,所以如果答案沒有反映出你的需求,提前道歉。

如果你想解決的問題是,你有很多,其中相同的頂級CMakeLists.txt鏈接像src目錄,並要包含駐留在每個特定目錄中的特定CMakeExtras.txt,那麼你就可以解決這通過加入:

include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeExtras.txt) 

到您的頂級CMakeLists.txt。據the documentation

這是目前正在由cmake的

處理,應該可以解決這個問題的完整路徑源目錄(即變量是指目錄進行處理,不給它使用的地方是CMakeLists.txt)。

相反,如果你的問題是如何計算src路徑,因爲到頂級CMakelists.txt鏈接是存在的,那麼你只是想用PROJECT_SOURCE_DIR其中:

是最源目錄最近的project()命令。