构建某些文件集时出现错误。有人会指出为什么我会出现此错误吗?我是否缺少某些软件包的安装?
错误日志的片段:
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
答案 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)))