1

make clean を 2 回実行すると、2 回目の呼び出しで、削除予定の依存 Makefile がビルドされます。削除予定のファイルを Makefile に認識させ、そのディレクトリに対する make の再帰呼び出しをスキップするにはどうすればよいですか? つまり、サブディレクトリごとに、各サブディレクトリにメイクファイルが既に存在する場合にのみ、サブディレクトリでクリーンアップを行います。GNU-Make の構文はわかりませんが、次のようなものを探しています。

Dependencies=[dependency1,dependency2,dependency3,dependency4]
DoNotMake=[bool1,bool2,bool3,bool4]
for all (i < 4): 
    if (! Dependencies(i)/Makefile):
        DoNotMake(i)=true

make clean の現在のルールは次のとおりです。

.PHONY: clean
clean:
    $(MAKE) MAKEDEPEND=off SUBDIR_ARGS=clean
    rm -f dependency1/Makefile
    rm -f dependency2/Makefile
    rm -f dependency3/Makefile
    rm -f dependency4/Makefile
    rm -f dependency4/src/config.h.in
4

1 に答える 1

1

あなたが投稿していないメイクファイルがまだたくさんあるので、明確な答えを出すことはできませんが、同様の問題を解決するために私たちが行っていることがいくつかあります.

make 変数MAKECMDGOALSには、現在の make ターゲットが含まれています。実行時に何かをしたくない場合はmake clean、次のようにすることができます。

ifeq (,$(findstring $(MAKECMDGOALS),clean))
  # Whatever you place here won't be run when you run 'make clean'
endif

シェル スクリプトを少し追加して、サブ makefile が存在する場合にのみそれを呼び出すこともできます。

some_target:
    [ -f $(SUB_FOLDER)/Makefile ] && $(MAKE) -C $(SUB_FOLDER)

Makefile が暗黙的に作成されている場合、これらは機能しない可能性があります。このオプションを使用して、make が makefile を再構築するのを防ぐことができる場合があり--assume-old=ます (存在しないファイルでそれを使用しようとしたことはないので、YMMV です)。

于 2012-07-18T20:25:32.530 に答える