この質問は、私の前の質問の続きです:この種のソース ジェネレーターを CMake ビルド チェーンに統合するにはどうすればよいですか?
現在、C ソース ファイルは次の方法で XS から生成されます。
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 ファイルが変更された場合にのみ再実行したいと考えています。ただし、そうすると、生成された不完全なソース ファイルを削除する必要があります。
私の質問は、コンパイル時にプログラムが異常終了した場合にのみ、生成されたファイルを削除する方法はありますか?
またはより一般的な: コンパイル時に別のコマンドの終了ステータスに応じてコマンドを実行する方法はありますか?