这个问题是我上一个问题的后续:如何将这种源生成器集成到 CMake 构建链中?
目前,从 XS 生成 C 源文件是这样的:
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${file_src_by_xs} PROPERTIES GENERATED 1)
add_custom_target(${file_src_by_xs}
COMMAND ${XSUBPP_EXECUTABLE} ${XSUBPP_EXTRA_OPTIONS} ${lang_args} ${typemap_args} ${file_xs} >${CMAKE_CURRENT_BINARY_DIR}/${file_src_by_xs}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${file_xs} ${files_xsh} ${_XSUBPP_TYPEMAP_FILES}
COMMENT "generating source from XS file ${file_xs}"
)
该GENERATED
属性让 cmake 在配置时不检查此源文件的存在,并add_custom_target
让xsubpp
每次编译时总是重新运行。总是重新运行的原因是因为xsubpp
即使失败也会生成一个不完整的源文件,所以整个编译有可能以一个不完整的源文件继续。
我发现总是重新运行源代码生成器并重新编译它很耗时。所以我想让它仅在修改依赖的 XS 文件时重新运行。但是,如果这样做,则必须删除不完整的生成源文件。
所以我的问题是:有什么办法可以删除生成的文件,只有当程序在编译时异常退出?
或更通用:有没有办法根据另一个命令在编译时的退出状态来运行命令?