私のプロジェクトでは、いくつかの出力ファイルを同時に生成するアクションがあります。それらの1つにコンパイルターゲットのようなルールが含まれています。GNU Make:.INTERMEDIATEターゲットの複数出力ルールは、生成されたインクルードされたメイクファイルと組み合わせることはできません。
ここには、私が実行したいと思う小さなメークファイルがあります。これは上で実行する必要があるため、
*** No rule to make target 'compile'. Stop.
2番目の呼び出しは、私が作る一度だけ実行したいと思います!!!! compiling !!!
出力と通常動作します:
SHELL = cmd.exe
rules_InputFiles = makefile
rules_OutputFiles = exec\rules.mk exec\other.mk
$(rules_OutputFiles): exec\rules.temp
.INTERMEDIATE: exec\rules.temp
exec\rules.temp: $(rules_InputFiles)
$(info == generating rules.mk and rules2.mk (due to $?) ==)
if not exist exec mkdir exec
@echo compile: >exec\rules.mk
# precede the second @echo with a tab character
@echo <tab>@echo !!!! compiling !!! >>exec\rules.mk
@echo compile2: >exec\other.mk
# precede the second @echo with a tab character
@echo <tab>@echo !!!! compiling2 !!! >>exec\other.mk
-include exec\rules.mk
メイクエラーメッセージにこのメイク結果のmake compile
を呼び出します相互作用なしにサーバーを構築します。
このメイクファイルは、constructed included makefilesのルールと中間ターゲットを持つ複数のターゲットの生成の組み合わせです。
私の質問です:私の目標を達成するためにこのメイクファイルを変更できますか?
いくつかの回避策を試しました。その1つは、中間ターゲットを省略し、rules.mkをマーカーファイルとして使用することです。これは、狂った科学者の記事に相当しますが、必要な依存関係は含まれていません。
ルールを$(rules_OutputFiles): $(rules_InputFiles)
と再入力すると、レシピが2回実行されますが、これは望ましくありません。