make [1]:MMD:找不到命令

时间:2019-06-18 16:27:31

标签: gcc makefile

构建某些文件集时出现错误。有人会指出为什么我会出现此错误吗?我是否缺少某些软件包的安装?

错误日志的片段:

make[1]: MMD: Command not found
    CC         drivers/usb/usbhid.libc.o
make[1]: MMD: Command not found
    CC         drivers/usb/usbmsc.libc.o
make[1]: MMD: Command not found
    CC         drivers/hid.libc.o
make[1]: MMD: Command not found
    AR         build/libc.a
make[1]: invalidar: Command not found
Makefile.inc:89: recipe for target 'build/libc.a' failed

我的makefile片段:

# macro to define template macros that are used by use_template macro
define create_cc_template
# $1 obj class
# $2 source suffix (c, S)
# $3 additional compiler flags
# $4 additional dependencies
ifn$(EMPTY)def $(1)-objs_$(2)_template
de$(EMPTY)fine $(1)-objs_$(2)_template
$(obj)/$$(1).$(1).o: $$(1).$(2) $(obj)/libpayload-config.h $(4)
        @printf "    CC         $$$$(subst $$$$(obj)/,,$$$$(@))\n"
        $(CC) $(3) -MMD $$$$(CFLAGS) -c -o $$$$@ $$$$<
en$(EMPTY)def
end$(EMPTY)if
endef

1 个答案:

答案 0 :(得分:3)

在我看来,当您调用此宏时,好像CC变量未定义为任何东西,并且第三个参数为空。这意味着在展开eval后,配方make内部化为:

-MMD $$(CFLAGS)...

一个快速解决方案是对CC的变量进行转义:

$$(CC) $(3) -MMD ...

我认为您的扩展模型很奇怪,在其他方面可能是错误的。但是,在不了解如何使用此宏的情况下,很难说。

调试eval问题的一种简单方法是复制eval出现的上下文,并用eval函数替换info。这将完全打印make将解析的内容,并且应该是完全正常且可以理解的makefile语法;例如,更改以下内容:

$(foreach X,$(STUFF),$(eval $(call FOO,$X)))

收件人:

$(foreach X,$(STUFF),$(info $(call FOO,$X)))
$(foreach X,$(STUFF),$(eval $(call FOO,$X)))