C++ プロジェクトのソース ファイルを生成するスクリプトがあります。スクリプト自体は次のようになります。
echo "total args: $#"
if [ $# -eq 7 ]; then
echo "in if"
$1/../tools/xsde [...]
fi
ターゲット smt_response_files が実行され、ファイル .xsd.files.make が存在しないか、.xsd ファイルよりも古い場合、makefile から実行されます。
$(smt_path) ?= .
$(smt_build) ?= $(smt_path)/build
$(common_build) ?= ../build
-include $(smt_build)/$(smt_gen_response_xsd).files.make
smt_response_files : | $(smt_build)/$(smt_gen_response_xsd).files.make
@:
$(smt_build)/$(smt_gen_response_xsd).files.make : $(smt_gen_response_path)/$(smt_gen_response_xsd)
@$(common_build)/generate_xml.sh $(smt_path) $(smt_gen_response_path) $(smt_gen_response_xsd) xml::$(smt_gen_response_class) make_list $(smt_build)/$(smt_gen_response_xsd).files.make smt_response_files
問題: プロジェクトをクリーンアップして *.xsd.files.make を削除すると、makefile が解析されるときにそれらが再作成されます (ロシア語からの出力を翻訳しました)。
Reading make-files...
total args: 7
in if
...
total: 2193
Updating makefile goals...
File `smt_clean' does not exist.
... (and a normal clean proccess goes next)
自動生成されたファイルは clean ターゲットによって削除されますが、その過程で作成されるのは好きではありません。
私の知る限り、これを行う唯一の方法は、メイクファイルとして含まれている *.xsd.files.make を再作成するためのルールを除外することです。
inc_gen ?= true
ifeq ($(MAKECMDGOALS),clean)
inc_gen := false
endif
# ... other excluded targets here (smt_clean, etc.)
ifeq ($(inc_gen),true)
$(smt_build)/$(smt_gen_response_xsd).files.make : $(smt_gen_response_path)/$(smt_gen_response_xsd)
@$(common_build)/generate_xml.sh $(smt_path) $(smt_gen_response_path) $(smt_gen_response_xsd) xml::$(smt_gen_response_class) make_list $(smt_build)/$(smt_gen_response_xsd).files.make smt_response_files
endif
私の問題を解決する他の方法はありますか?たぶん、より一般的なアプローチが存在しますか?
よろしくお願いします。