我们有一个内核模块,它有自己的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