Makefile で CXX の設定をうまくやりたいメモ

2023/06/10に公開

Makefile で CXX をデフォルト clang++ にしたい.

しかし CXX=bora++ make のように環境変数で上書きできるようにしたい.

CXX ?= clang++

だと, CXX のデフォルトが g++ で設定されているため, デフォルト動作が g++ となってしまう.(?= は変数が定義されていなかったら代入だが, CXXg++ がデフォルトとして定義されているため代入動作が発生しない)

CXX := clang++

だと環境変数で上書きできない.

info を使うてもありますが, print されてしまうのでちょっとつらい

https://stackoverflow.com/questions/64363030/how-to-print-environment-variables-from-makefile

解決

_CXXENV = $(shell printenv 'CXX')
  
ifeq ($(_CXXENV),)
  CXX := clang++
endif
  
all:
        $(CXX) -o test test.cc

まずは printenv shell コマンドで CXX 環境変数を取得します.

その後 ifeq でカラ文字だったら希望の cxx をセットします!

printenv がどのシェルでも使えるかは不明ですが, たぶんよほどへんてこなシェルでなければ abailable でしょう.

Discussion