不同的Makefile目标的不同变量集

时间:2014-12-23 18:11:22

标签: c++ c makefile

我正在尝试为现有的Makefile添加一些灵活性,该Makefile目前只针对一个架构进行编译。我假设在我的更改之前,所有'是默认目标 - 这是第一个没有点的目标,它位于巨大文件中间的某个位置。

我已添加

default_action: stm32f4target

位于文件顶部,

stm32f4target: all

到文件的底部,我认为这包装了所有'在我的新默认值' stm32f4target'任务。仍然有效。

现在我想制作一个现有的变量定义

USE_FPU = yes

以我的目标为条件,所以我将其更改为

stm32f4target: USE_FPU = yes

但这打破了一切:我仍在调用make而不使用参数,我假设我的新stm32f4target是默认目标。我从C编译器收到一条消息,说明与FPU相关的宏被重新定义,这意味着我的上一次更改改变了Makefile的行为,这是我没想到的。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

据我所知,标准make中没有办法在make执行期间有条件地设置变量。但作为解决方法,您可以在命令行上使用该变量集进行递归make调用:

stm32f4target:
        $(MAKE) all USE_FPU=yes

命令行定义会覆盖Makefile变量,因此如果您愿意,可以在Makefile中保留默认的USE_FPU = no。

答案 1 :(得分:1)

如果您使用的是,则可以使用eval函数为变量指定值

stm32f4target: 
    $(eval USE_FPU=yes)