Linux知識點(8)_ROS下如何利用CMakeLists.txt進行多目錄工程管理?

在程序開發中,如果工程比較小,我們通常是把.cpp文件往主程序的CMakeLists.txt文件裏面寫,但是如果遇到一個系統工程,比如模塊化開發,就會涉及到多個目錄下.cpp文件的編譯,如果這個時候再把.cpp一個個往主程序寫,這個工作量也是相當繁雜的。因此這裏以ROS工程爲例,介紹一下多目錄工程管理。
比如在ROS下有這樣的一個功能包:
在這裏插入圖片描述
apps/目錄下的lidar_perception_node爲當前工程的主程序(即main入口)。
那麼src下的這些目錄,該怎麼鏈接到主程序上?這裏以cloudfilter目錄爲例:
在這裏插入圖片描述
可以看到這裏有兩個CMakeLists.txt文件,先打開cloudfilter/CMakeLists.txt:

aux_source_directory(. DIR_CLOUDFILTER_SRCS)
add_library(cloudfilter ${DIR_CLOUDFILTER_SRCS})

即把當前目錄下所有源文件賦給DIR_CLOUDFILTER_SRCS,生成依賴文件cloudfilter。

再看頂層的CMakeLists.txt:

include_directories(
  include/
)
add_subdirectory(src/cloudfilter)
# Target
add_executable(lidar_perception apps/lidar_perception_node.cpp )
target_link_libraries(lidar_perception groundfilter)

add_subdirectory(src/cloudfilter)#該命令告訴CMake去子目錄中查看可用的CMakeLists.txt文件

over!是不是很簡單。
aux_source_directory()
add_subdirectory()
掌握兩個語句就可以讓你的CMake工程顯得沒那麼複雜了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章