GNU Make > 並列実行(--jobs または -j オプション)
以下のようなディレクトリ構造で、
関連リンク:
英語のmakeドキュメント
サンプルコード
GNU Make [本]
satoshi@debian:~/git/sample-codes/gnu_make_jobs$ tree普通に、makeと打てば再帰的にmakeができるが、
.
|-- Makefile
|-- bar
| |-- Makefile
| `-- bar.c
|-- baz
| `-- Makefile
`-- foo
|-- Makefile
`-- foo.c
3 directories, 6 files
satoshi@debian:~/git/sample-codes/gnu_make_jobs$ cat Makefile
.PHONY: all clean foo bar baz
SUBDIR = baz foo bar
all: $(SUBDIR)
clean:
$(MAKE) TARGET=$@
$(SUBDIR):
$(MAKE) --directory=$@ $(TARGET)
satoshi@debian:~/git/sample-codes/gnu_make_jobs$ cat foo/Makefile
all:
gcc -o foo foo.c
clean:
rm foo
satoshi@debian:~/git/sample-codes/gnu_make_jobs$ makeここで、-jobs N を指定すると並列ビルドが可能になる
make --directory=baz
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/baz' に入ります
echo "baz directory"
baz directory
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/baz' から出ます
make --directory=foo
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/foo' に入ります
gcc -o foo foo.c
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/foo' から出ます
make --directory=bar
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/bar' に入ります
gcc -o bar bar.c
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/bar' から出ます
satoshi@debian:~/git/sample-codes/gnu_make_jobs$ make --jobs 3
make --directory=baz
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/baz' に入ります
echo "baz directory"
baz directory
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/baz' から出ます
make --directory=foo
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/foo' に入ります
gcc -o foo foo.c
make --directory=bar
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/bar' に入ります
gcc -o bar bar.c
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/foo' から出ます
make[1]: ディレクトリ `/home/satoshi/git/sample-codes/gnu_make_jobs/bar' から出ます
関連リンク:
英語のmakeドキュメント
サンプルコード
GNU Make [本]