64
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

makefile 動的に変数に代入 共通して使う

Last updated at Posted at 2017-08-17

概要

Makefile のルールの中で変数を宣言し、それを使いまわしたい.

動機

代入する中身をshellコマンドにする場合 $(shell ...) とすれば、そのコマンドの出力を代入できる. (代入する値が定数ならこの記事に書いて有ることは気にせず、ルールの外で代入しておけばよい.) shellコマンドによっては (例えば peco コマンド) 何度も実行したくないし、別のルールを make する場合は一度も実行したくない. なので、あるルールの中で唯一度だけshellコマンド実行し、その出力を代入し、それを何度も使いたいという動機がある.

方法

通常、Makefile における変数の代入は := で行う.
しかしこれは (ba)sh のコマンドではないのでルールの中には書けない. つまり下のような Makefile は違法.

bad.makefile
rule:
	F := $(shell seq 10 | peco)
	echo $(F)
	echo $(F)

$(eval ...) の中に入れてやると良いということらしい.

good.makefile
rule:
	$(eval F := $(shell seq 10 | peco))
	echo $(F)
	echo $(F)

他のルールから参照

することも問題なくできます.

a:
	$(eval A := $(shell date))
	echo "set A"

b: a
	echo $(A)
$ make b
echo "set A"
set A
echo 2017年 8月24日 木曜日 15時12分07秒 JST
2017年 8月24日 木曜日 15時12分07秒 JST
64
33
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
64
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?