针对不同生成文件目标的不同变量集

different sets of variables for different Makefile target

本文关键字:变量 目标 文件      更新时间:2023-10-16

我正在尝试为现有的Makefile添加一些灵活性,该Makefile目前仅针对一种架构进行编译。我假设在我更改之前,"all"是默认目标 - 这是第一个没有点的目标,它在大文件中间的某个地方定义。

我已添加

default_action: stm32f4target

在文件顶部和

stm32f4target: all

到文件底部,我假设这会将"全部"包装在我的新默认"stm32f4target"任务中。仍然有效。

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

USE_FPU = yes

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

stm32f4target: USE_FPU = yes

但这破坏了一切:我仍然在没有参数的情况下调用 make,我假设我的新 stm32f4target 是默认目标。我从我的 C 编译器收到一条消息,指出与 FPU 相关的宏被重新定义,这意味着我的最后一次更改改变了我没想到的 Makefile 的行为。我在这里做错了什么?

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

stm32f4target:
        $(MAKE) all USE_FPU=yes

命令行定义会覆盖生成文件变量,因此您可以根据需要在生成文件中保留默认的 USE_FPU=no。

如果你使用的是 gnu-make,你可以使用 eval 函数为变量赋值

stm32f4target: 
    $(eval USE_FPU=yes)