Makefileのmake
コマンドを順序付けして、すべてのサブディレクトリmake
コマンド(サブディレクトリのMakefileで定義)で再帰的に実行するにはどうすればよいですか?
追伸 my answer から別の関連する質問へのコードスニペットは、おおよその概算として使用できます。
@ eldar-abusalimov、投稿した最初のリンクは、makefile knowsがサブフォルダーであると想定しています。これは常に正しいとは限りません。@ tyranitarが知りたいのはそれだと思います。その場合、そのような解決策は仕事をすることができます:(しばらく時間をかけましたが、私もそれを必要としました)
Shell=/bin/bash
all:
@for a in $$(ls); do \
if [ -d $$a ]; then \
echo "processing folder $$a"; \
$(MAKE) -C $$a; \
fi; \
done;
@echo "Done!"
ここに私の特定のソリューションを送信します。多くのサブディレクトリを持つディレクトリがあり、そのすべてに独自のmakefileがあるとします。
root-dir\
+----subdir1
+----subdir2
...
+----subdirn
次に、このMakefileをroot-dirにコピーします。
SUBDIRS = $(Shell ls -d */)
all:
for dir in $(SUBDIRS) ; do \
make -C $$dir ; \
done
上記の回答は、すべてのサブディレクトリにMakefileがある場合にうまく機能します。 Makefileを含むディレクトリでのみmakeを実行することも、再帰するレベルの数を制限することも難しくありません。私のサンプルコードでは、メイクファイルの検索を親ディレクトリのすぐ下のサブディレクトリに制限しています。 filter-outステートメント(2行目)は、このMakefileが再帰的なmakeに含まれないようにします。
MAKEFILES = $(Shell find . -maxdepth 2 -type f -name Makefile)
SUBDIRS = $(filter-out ./,$(dir $(MAKEFILES)))
all:
for dir in $(SUBDIRS); do \
make -C $$dir all; \
done