如何确保CMake自定义命令在units目标的依赖构建前执行?
解决CMake中清空日志命令在依赖后执行的问题
问题核心在于:PRE_BUILD 自定义命令是针对 units 目标本身的构建步骤,而CMake会优先构建units的所有依赖目标(静态库),再执行units的PRE_BUILD命令,这就导致清空日志的操作滞后于依赖构建。
要让清空日志的操作在所有静态库构建前执行,可通过以下步骤调整:
创建独立的清空日志目标
将清空日志的操作单独做成一个自定义目标,而非绑定到units的PRE_BUILD:add_custom_target(clear_util_log COMMENT "Clearing statistics log" COMMAND echo "" > ${UTIL_LOG_PATH} )让所有静态库目标依赖该清空目标
遍历项目中所有静态库目标,让它们都依赖clear_util_log。这样CMake在构建任何静态库之前,都会先执行清空日志的操作:# 替换YOUR_STATIC_LIBS为你项目中所有静态库目标的列表 foreach(static_lib IN LISTS YOUR_STATIC_LIBS) add_dependencies(${static_lib} clear_util_log) endforeach()保持units目标对静态库的依赖
继续让units目标依赖所有静态库,确保统计操作在静态库构建完成后执行:add_custom_target(units) add_dependencies(units ${YOUR_STATIC_LIBS})
补充说明
如果你的静态库是通过add_subdirectory批量添加的,也可以在添加子目录前统一设置依赖,或者在每个静态库的CMakeLists.txt中添加add_dependencies(${PROJECT_NAME} clear_util_log),确保所有静态库都继承这个依赖关系。
内容的提问来源于stack exchange,提问作者Walkingbeard
相关产品推荐
相关产品推荐

