使用$<添加额外cflag时遇到问题;在makefile



我们有一个内核模块,它有自己的makefile,可以正常工作。

all::
    $(MAKE) -C $(KSRC) M=$(PWD) modules

有时我们需要make通过将-Wa,-ahlms加入CFLAGS来输出.lst。在makefile中,我们添加了EXTRA_CFLAGS += -Wa,-ahlms=$<.lst

然而,这不起作用,因为此时$<为空,$$<也不起作用。有人知道怎么解决这个问题吗?

在make: simple:

中以两种方式定义变量(就我们的目的而言)
FOO := $<

,其中右边立即求值,因此将FOO设置为空字符串。和递归:

FOO = $<

,在使用变量之前不计算右侧;这将FOO设置为$<,然后当$(FOO)扩展时,将扩展当时的$<的值。

显然,如果您想在变量值中包含自动变量,则后者是您想要的。当您使用+=操作符时,变量的类型(简单还是递归)是从变量的先前设置推断出来的(如果没有先前设置,则递归是默认设置)。你没有显示EXTRA_CFLAGS是如何设置的,但如果你有这个问题,那么一定是有人把它设置得很简单:

EXTRA_CFLAGS :=

如果你不能改变它来使用递归设置,那么你唯一能做的就是在分配它时显式地使用=而不是+=:

EXTRA_CFLAGS = -Wa,-ahlms=$<.lst

如果你真的想要添加一个现有的值,你所能做的就是创建额外的变量,像这样:

PREVIOUS_EXTRA_CFLAGS := $(EXTRA_CFLAGS)
EXTRA_CFLAGS = $(PREVIOUS_EXTRA_CFLAGS) -Wa,-ahlms=$<.lst

最新更新