在程序开发中,如果工程比较小,我们通常是把.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 cloudfilter)
add_subdirectory(src/cloudfilter)#该命令告诉CMake去子目录中查看可用的CMakeLists.txt文件
over!
aux_source_directory()
add_subdirectory()
掌握两个语句就可以让你的CMake工程显得没那么复杂了。