LoginSignup
37
25

More than 5 years have passed since last update.

タスク・ランナーとしてのMake

Last updated at Posted at 2017-03-03

Makeはタスク・ランナーとして使うことができます。

通常はMakefileに記述するルールのターゲットはファイルですが、本当のファイルではないPhonyターゲット(偽ターゲット)のルールを作成することができます。

Makefile
.PHONY: taskA taskB taskC

taskA:
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

taskB:
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

taskC: taskB
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

引数として指定したタスクを実行します。

$ make taskA
Starting taskA
sleep 1
Finished taskA

複数のタスクを指定すると、順次実行します。

$ make taskA taskB
Starting taskA
sleep 1
Finished taskA
Starting taskB
sleep 1
Finished taskB

-jオプションを使うと、タスクを同時に実行します。

$ make -j taskA taskB
Starting taskA
sleep 1
Starting taskB
sleep 1
Finished taskA
Finished taskB

タスクの依存関係を判断して実行します。

$ make taskC
Starting taskB
sleep 1
Finished taskB
Starting taskC
sleep 1
Finished taskC

最後に、私が使っているMakefileのテンプレートを紹介します。

Makefile
MAKEFLAGS += --warn-undefined-variables
SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := help

# all targets are phony
.PHONY: $(shell egrep -o ^[a-zA-Z_-]+: $(MAKEFILE_LIST) | sed 's/://')

taskA: ## executes task A
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

taskB: ## executes task B
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

taskC: taskB ## executes task C (depends task B)
    @echo 'Starting $@'
    sleep 1
    @echo 'Finished $@'

help: ## Print this help
    @echo 'Usage: make [target]'
    @echo ''
    @echo 'Targets:'
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

使いやすくするために、各ターゲット名の後ろに##を付けてコメントを記載し、helpターゲットでヘルプを表示するようにしています。

$ make
Usage: make [target]

Targets:
taskA                          executes task A
taskB                          executes task B
taskC                          executes task C (depends task B)
help                           Print this help

参考

37
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
25