我有一个包含通用设置的主生成文件和一个具有项目特定设置的子生成文件。
从我关于在 makefile 中覆盖变量的另一个问题中,我了解到我可以在我的主 makefile 中使用以下代码:
CC ?= avr-gcc
CXX ?= avr-g++
在子 makefile 中,我使用colorgcc并覆盖这些变量:
CC ?= color-avr-gcc
CXX ?= color-avr-g++
一切正常。
但是,如果我从我的子 makefile 中删除上述行,make 开始使用gcc
andg++
而不是avr-gcc
and avr-g++
。
我猜两者都被区别对待,CC
并且CXX
它们由 make 提供了默认值,我无法使用以下语句为它们分配默认值:
CC ?= avr-gcc
CXX ?= avr-g++
我的问题:
- 我的假设正确吗?
- 如果是,是否有任何其他方法可以在主 makefile 中提供默认值
CC
并CXX
让 make 使用它,如果我不在子 makefile 中覆盖它们?
编辑:
根据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
在 master.xml 中定义。
PS:顺便说一句,我的主 makefile 是 Arduino 的 makefile,完整的源代码可在github中找到。