从Makefile执行命令

从Makefile执行命令,makefile,Makefile,考虑以下Makefile: CURRENT = $(shell uname -r) KDIR = /lib/modules/$(CURRENT)/build PWD = $(shell pwd) TARGET1 = md1 TARGET2 = md2 TARGET3 = md3 obj-m := $(TARGET1).o $(TARGET2).o $(TARGET3).o default: make -C $(KDIR) M=$(PWD) modules

考虑以下
Makefile

CURRENT = $(shell uname -r) 
KDIR = /lib/modules/$(CURRENT)/build 
PWD = $(shell pwd) 
TARGET1 = md1 
TARGET2 = md2 
TARGET3 = md3 
obj-m   := $(TARGET1).o $(TARGET2).o $(TARGET3).o 
default: 
        make -C $(KDIR) M=$(PWD) modules 

当前
Makefile
中声明的变量是否真的会到达
$(KDIR)/Makefile

中。一般来说,make变量是make的内部变量,在make的递归调用中不可用

如果希望变量在子品牌中可用,则需要在子品牌的命令行上传递该变量,或者从父品牌导出该变量;后者将在调用子make时将其放入环境中

但是请注意,makefiles中的赋值会覆盖从环境中获取的值。因此,
$(KDIR)/Makefile
在设置值之前需要小心地测试该值,如果设置了该值的话


顺便说一句,您不应该使用文本
make
调用递归make。始终使用变量<代码>$(MAKE)

始终使用变量$(MAKE)。为什么必须使用
MAKE
变量而不是MAKE-literal?几天前您不是已经在这里问过这个问题了吗?