0

我正在阅读openwrt的makefile,原始文件可以在这里找到: https ://dev.openwrt.org/browser/trunk/target/linux/ramips/image/Makefile#L589

我无法理解这些行:

BuildFirmware/Default8M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_8M),$(4))
BuildFirmware/Default8M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))

Image/Build/Profile/MT7620a=$(call BuildFirmware/Default8M/$(1),$(1),mt7620a,MT7620a)

Q1。$(1), $(2).....这些变量从何而来?如何为它们分配值?Q2。如果 $(1) 是“squashfs”,是否意味着第 3 行正在调用第 1 行中定义的“函数”?在我看来,参数列表不匹配。Q3。这些变量名中的斜杠“/”看起来很奇怪。这是定义变量的好方法吗?我认为我们可以将其更改为:Image_Build_Profile_MT7620a

提前致谢。

4

1 回答 1

1

A1:变量$(1)等是函数$(2)使用的占位符。call手册

reverse = $(2) $(1)

foo = $(call reverse,a,b)

Here foo will contain ‘b a’. 

A2:如果我们调用

$(call Image/Build/Profile/MT7620a,squashfs)

它将扩展到

$(call BuildFirmware/Default8M/squashfs,squashfs,mt7620a,MT7620a)

BuildFirmware/Default8M/squashfs不会出现在您的列表中。第二行定义BuildFirmware/Default8M/initramfs,但BuildFirmware/Default8M/squashfs必须在其他地方定义。

另一方面,如果我们调用

$(call Image/Build/Profile/MT7620a,initramfs)

它将扩展到

$(call BuildFirmware/Default8M/initramfs,initramfs,mt7620a,MT7620a)

然后

$(call BuildFirmware/OF/initramfs,initramfs,initramfs,mt7620a,MT7620a)

然后我们必须去寻找BuildFirmware/OF/initramfs被定义的地方......这最终可能会导致回到第一线。

A3:斜线的这种使用是可怕的,但合法的。

于 2013-08-20T13:31:22.363 回答