一般的な設定を含むマスター makefile と、プロジェクト固有の設定を含む子 makefile があります。
makefile での変数のオーバーライドに関する他の質問から、マスター makefile で次のコードを使用できることがわかりました。
CC ?= avr-gcc
CXX ?= avr-g++
子 makefile では、colorgccを使用してこれらの変数をオーバーライドします。
CC ?= color-avr-gcc
CXX ?= color-avr-g++
すべてが機能します。
しかし、子の makefile から上記の行を削除すると、make は and の代わりに and を使用gcc
しg++
始めavr-gcc
ますavr-g++
。
CC
との両方のCXX
扱いが異なると思います。make によってデフォルト値が提供され、次のステートメントを使用してデフォルト値を割り当てることができません。
CC ?= avr-gcc
CXX ?= avr-g++
私の質問:
- 私の仮定は正しいですか?
- はいの場合、子のメイクファイルでそれらをオーバーライドしない場合、マスターのメイクファイルにデフォルト値を提供し、それを使用させる
CC
他の方法はありますか?CXX
編集:
Chrono Kitsuneの提案に従って、私は次のことを行いました
マスターメイクファイル
CC = avr-gcc
CXX = avr-g++
# Add other master macros here.
# Add other master targets here.
子メイクファイル
CC ?= color-avr-gcc
CXX ?= color-avr-g++
# There are no child macros or targets
include master.mk
残念ながら、これでもうまくいきませんでした。私が実行make child.mk
すると、マスターCC
でCXX
定義された が取得されます。
PS: ところで、私のマスター makefile は Arduino 用の makefile であり、完全なソース コードはgithubで入手できます。