我正在尝试为现有的Makefile添加一些灵活性,该Makefile目前只针对一个架构进行编译。我假设在我的更改之前,所有'是默认目标 - 这是第一个没有点的目标,它位于巨大文件中间的某个位置。
我已添加
default_action: stm32f4target
位于文件顶部,
stm32f4target: all
到文件的底部,我认为这包装了所有'在我的新默认值' stm32f4target'任务。仍然有效。
现在我想制作一个现有的变量定义
USE_FPU = yes
以我的目标为条件,所以我将其更改为
stm32f4target: USE_FPU = yes
但这打破了一切:我仍在调用make而不使用参数,我假设我的新stm32f4target是默认目标。我从C编译器收到一条消息,说明与FPU相关的宏被重新定义,这意味着我的上一次更改改变了Makefile的行为,这是我没想到的。我在这里做错了什么?
答案 0 :(得分:1)
据我所知,标准make中没有办法在make执行期间有条件地设置变量。但作为解决方法,您可以在命令行上使用该变量集进行递归make调用:
stm32f4target:
$(MAKE) all USE_FPU=yes
命令行定义会覆盖Makefile变量,因此如果您愿意,可以在Makefile中保留默认的USE_FPU = no。
答案 1 :(得分:1)
如果您使用的是gnu-make,则可以使用eval
函数为变量指定值
stm32f4target:
$(eval USE_FPU=yes)