现在有3个模块:main、service、base,main依赖service的service.h、service依赖base的base.h,怎么写CMakeList.txt避免main直接耦合base
- main - service - base |
---|
base模块
- base.h - base.cpp - CMakeLists.txt |
1 #base/CMakeLists.txt 2 3 cmake_minimum_required(VERSION 3.12) 4 5 set(HEADER_LIST base.h) 6 set(SRC_LIST base.cpp) 7 8 file(COPY ${HEADER_LIST} DESTINATION ".") 9 10 add_library(base ${HEADER_LIST} ${SRC_LIST})
- file(COPY ${HEADER_LIST} DESTINATION ".")
主要是为了把头文件做为一个编译输出,方便下面的使用
service 模块
- service.h - service.cpp - CMakeLists.txt |
1 #service/CMakeLists.txt 2 3 cmake_minimum_required(VERSION 3.12) 4 5 set(SRC_LIST service.cpp) 6 set(HEADER_LIST service.h) 7 8 add_subdirectory(${CMAKE_SOURCE_DIR}/../base base.output) 9 include_directories(base.output) 10 11 file(COPY ${HEADER_LIST} DESTINATION ".") 12 13 add_library(service ${HEADER_LIST} ${SRC_LIST}) 14 15 add_dependencies(service base) 16 target_link_libraries(service base)
- add_subdirectory(${CMAKE_SOURCE_DIR}/../base base.output)
将base模块的输出base.h、libbase.a放到当前目录的base.output下
main 模块
- main.cpp - CMakeLists.txt |
1 #main/CMakeLists.txt 2 3 cmake_minimum_required(VERSION 3.12) 4 5 project(main) 6 set(SOURCE_LIST main.cpp) 7 8 add_subdirectory(${CMAKE_SOURCE_DIR}/../service service.output) 9 10 file(GLOB_RECURSE INC_PATH cmake_install.cmake) 11 foreach(DIR ${INC_PATH}) 12 STRING(REPLACE "/cmake_install.cmake" "" dirName ${DIR}) 13 include_directories(${dirName}) 14 endforeach() 15 16 add_executable(main ${SOURCE_LIST} ${HEADER_LIST}) 17 18 add_dependencies(main service) 19 target_link_libraries(main service)
-
add_subdirectory(${CMAKE_SOURCE_DIR}/../service service.output)
将service的输出放到service.output,而base的输出自动到了service.output/base.output下
-
foreach(DIR ${INC_PATH}) .....
遍历所有的output目录添加到main的依赖里,暂时没有想到更好的方法