GNU Make > 条件分岐(if)

Makefileの中で、条件分岐をしたいときは、if文を使う。

まず、変数が定義済みかどうかで条件分岐したい場合は、ifdefを使う。
サンプルは以下。(インデントはタブです。)
$ cat Makefile
.PHONY: all

ECHO = /bin/echo

all:
ifdef ECHO
        echo 'ifdef ECHO == true'
endif
ifdef FOO
        echo 'ifdef FOO == true'
else
        echo 'ifdef FOO == false'
endif

$ make
echo 'ifdef ECHO == true'
ifdef ECHO == true
echo 'ifdef FOO == false'
ifdef FOO == false
文字列が等しいかどうかを確認したい場合は、
ifeqを用いる。等しくないかどうかを確認したい場合は
ifnreqを用いる。
$ cat Makefile
.PHONY: all

ECHO = /bin/echo

all:
# 文字列として一致するか
ifeq ($(ECHO),/bin/echo)
        echo 'ifeq ECHO == /bin/echo'
else
        echo 'ifeq ECHO != /bin/echo'
endif

# 空白文字列が混入しやすいので
# 以下のように書くと堅牢
ifeq "$(ECHO)" "/bin/echo"
        echo 'ifeq ECHO == /bin/echo'
endif
satoshi@debian:~/git/sample-codes/gnu_make_if$ make
echo 'ifeq ECHO == /bin/echo'
ifeq ECHO == /bin/echo
echo 'ifeq ECHO == /bin/echo'
ifeq ECHO == /bin/echo
OSやCPUの種類によって、if文を使い、makeの挙動をわける、
などの使い道が考えられる。

GNU Make   [本]

人気の投稿