37
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タスク・ランナーとしての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 += --no-builtin-rules
MAKEFLAGS += --warn-undefined-variables
SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c
ALL_TARGETS := $(shell grep -E -o ^[0-9A-Za-z_-]+: $(MAKEFILE_LIST) | sed 's/://')
.PHONY: $(ALL_TARGETS)
.DEFAULT_GOAL := help

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

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 on task B)
	@echo 'Starting $@'
	sleep 1
	@echo 'Finished $@'

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

$ make
Usage: make [target]

Targets:
help                           prints this messages
taskA                          executes task A
taskB                          executes task B
taskC                          executes task C (depends on task B)

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?