控制CMake/CMakeLists.txt的编译顺序
1、在CMakeLists.txt中经常用到: add_subdirectory(),单独编译子模块,
但是主模块经常依赖子模块的编译结果,通常为库,此时如果用make -j8 并行编译方式,很可能出现编译错误,
原因就是主模块、子模块并行编译,当主模块先完成编译去链接子模块的库时,找不到目标库,而出现链接失败。
2、解决方法
add_dependencies() 对主模块的目标添加子模块的目标作为依赖,这样就能保证子模块优先主模块编译,例子如下:
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/livox_ros_driver/)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/ceres-solver-2.0.0/)
add_dependencies(li_init livox_sdk_static ceres ) #控制CMake编译顺序,解决库依赖问题
li_init: 主模块的目标,add_executable(li_init,src/laserMapping.cpp...)
livox_sdk_static: 子模块1的目标, 在子目录下的CMakeLists.txt中可以找到: add_library(${SDK_LIBRARY} STATIC "")
ceres: 子模块2的目标,在子目录下的CMakeLists.txt中可以找到: add_library(ceres STATIC "")



