#cmake 构建依赖处理
##子工程构建依赖
在日常开发过程中一个项目常常会包含多个子项目,而多个子项目之间是存在构建依赖关系的,如下:
ADD_SUBDIRECTORY(base)
ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(application)
对于常规的方式不需要做什么特殊处理,cmake 会根据target_link_libraries 依赖项来做构建顺序处理
##非子项外部依赖
对于一些非常规subdir子项,如在cmake工程种通过源码构建依赖子项 qwt 而qwt是通过qt pro 管理的
无法直接通过ADD_SUBDIRECTORY添加,针对此种情况目前想到两种可行方案
方案一:
execute_process(COMMAND bash generate.sh WORKING_DIRECTORY ${QWT_DIR} )
通过cmakelist 调用execute_process 执行脚本,在执行cmake时就通过命令直接编译,保证后续工程编译是可以直接使用(在cmake 阶段就编译 会造成cmake时间较长)
方案二:
add_custom_target(QWT_CUSTOM COMMAND bash generate.sh WORKING_DIRECTORY
Q
W
T
D
I
R
)
a
d
d
e
x
e
c
u
t
a
b
l
e
(
{QWT_DIR}) add_executable(
QWTDIR)addexecutable({ProName}
“src/*.cpp”
)
add_dependencies(${ProName} QWT_CUSTOM)
通过add_custom_target添加一个任务,然后通过add_dependencies设置目标对象依赖于自定义任务对象,这样就能保证在项目构建阶段可以有先构建自定义任务