我们有一个内核模块,它有自己的makefile
,可以正常工作。
all::
$(MAKE) -C $(KSRC) M=$(PWD) modules
有时我们需要make
通过将.lst
添加到-Wa,-ahlms
来输出CFLAGS
。在我们的makefile
中,我们添加了EXTRA_CFLAGS += -Wa,-ahlms=$<.lst
。
但是,这不起作用,因为$<
此时为空,$$<
也不起作用。有人知道我们如何解决这个问题吗?
答案 0 :(得分:0)
变量在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