CMake如何实现类似Makefile的依赖变更触发自定义命令功能?
CMake实现依赖变更触发自定义命令的方案
你可以在模板空缺位置补充如下代码实现需求:
# 定义依赖变更触发的自定义规则 add_custom_command( # 此处用占位文件记录命令执行状态,若你自定义命令有实际输出文件可直接替换为输出文件路径 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp # 此处填写所有需要监控变更的依赖文件 DEPENDS if_this_file_changes.cpp if_this_file_changes.txt # 此处替换为你要执行的实际自定义命令,支持多条COMMAND顺序执行 COMMAND run_some_command # 更新占位文件的修改时间,用于下一次构建的变更对比 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp COMMENT "检测到依赖文件变更,执行自定义操作..." ) # 声明自定义构建目标,加入默认构建流程 add_custom_target( run_custom_check ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp ) # 绑定自定义目标到最终的hello可执行目标,保证依赖检查先于编译执行 add_dependencies(hello run_custom_check)
规则说明
- 只要
DEPENDS列表中任意一个文件的修改时间晚于占位文件的修改时间,就会自动执行你指定的COMMAND命令,无变更时不会重复执行 - 如果你要执行的命令本身有固定的输出文件,可以直接把
OUTPUT参数改为你的实际输出文件路径,同时删掉额外touch占位文件的COMMAND即可,逻辑更简洁 - 用到的
${CMAKE_COMMAND} -E touch是CMake内置的跨平台touch实现,不会依赖系统自带的命令工具,兼容性更好
内容的提问来源于stack exchange,提问作者Hayk Poghosyan
相关产品推荐
相关产品推荐

