さまざまなディレクトリに多数のCファイルがありmake: nothing to be done for 'all'、再帰的なMakefileでエラーが発生します。ただし、依存関係を微調整すれば、それを機能させることができます...しかし、なぜそうしなければならないのかわかりません。
これが私のオリジナルのMakefileです:
APP_DIRS=rescoco ressys resvm
.PHONY: all
all: $(APP_DIRS)
$(APP_DIRS):
    $(MAKE) --directory $@
clean:
    $(RM) *~
今、私が私の行を変更した場合:それはうまく構築.PHONYされます。.PHONY: all $(APP_DIRS)
もう1つの可能性は、行を変更した場合$(APP_DIRS):です$(APP_DIRS): clean。
(注:.PHONYターゲットを削除しても、何も変更されません)
では、ここで何が起こっているのでしょうか。Makefileは、依存関係を正しくリストしていないことを通知しようとしていますか?私はmake次のようなことをすると思っていました:
- 構築する
.PHONYには最初に構築する必要がありますall - 構築する
allには最初に構築する必要があります$(APP_DIRS) $(APP_DIRS)前提条件がないので、そのためのコマンドを実行します(これにより、再帰的なmakeが実行されます)。
明らかに私は間違っています。しかし、なぜ?
参考までに、私のファイルが次のように構成されていることが重要な場合:
Makefile       #top level makefile as seen above
/rescoco
    rescoco.c
    Makefile   #builds rescoco src and moves archive to ../lib directory
/ressys
    ressys.c
    Makefile   #same as above but for ressys
/resvm
    resvm.c
    Makefile   #same as above but for resvm
/lib
私のビルドコマンドは単純makeです。で実行した場合、make -nまたはmake -n all出力がまったく得られなかった場合:
:~/proj$ make -n all
make: Nothing to be done for 'all'.
:~/proj$