✊
Makefile で CXX の設定をうまくやりたいメモ
Makefile で CXX をデフォルト clang++ にしたい.
しかし CXX=bora++ make
のように環境変数で上書きできるようにしたい.
CXX ?= clang++
だと, CXX
のデフォルトが g++
で設定されているため, デフォルト動作が g++
となってしまう.(?=
は変数が定義されていなかったら代入だが, CXX
は g++
がデフォルトとして定義されているため代入動作が発生しない)
CXX := clang++
だと環境変数で上書きできない.
info を使うてもありますが, print されてしまうのでちょっとつらい
解決
_CXXENV = $(shell printenv 'CXX')
ifeq ($(_CXXENV),)
CXX := clang++
endif
all:
$(CXX) -o test test.cc
まずは printenv shell コマンドで CXX 環境変数を取得します.
その後 ifeq でカラ文字だったら希望の cxx をセットします!
printenv がどのシェルでも使えるかは不明ですが, たぶんよほどへんてこなシェルでなければ abailable でしょう.
Discussion