我正在尝试通过汇编程序编译几个.c文件:
SubmitQuery
$(XCC)是一种交叉编译工具。
实际上,我看到了:
%.S: %.c
$(XCC) -S -o $@ $(XCFLAGS) -c $<
%.o: %.S
$(XCC) -o $@ $(XCFLAGS) -c $<
test.a: test.o foo.o
$(LD) -o $@ $^ $(XLDFLAGS)
运行本机编译而不是必需的交叉编译。我看起来像%.c到%.o的一些默认规则使用而不是描述链规则。
如果我将一个模式更改为直接描述,则编译正常:
cc -c -o test0.o test0.c
cc -c -o foo.o foo.c
模式链有什么问题?是否可以禁用%.o?
的默认规则答案 0 :(得分:3)
有一个默认规则可以从.o
文件生成.c
个文件。使用第一个makefile时会调用该规则。
您可以将以下内容添加到makefile中以覆盖默认规则:
%.o: %.c
$(XCC) -S -o $*.S $(XCFLAGS) -c $<
$(XCC) -o $@ $(XCFLAGS) -c $*.S
您也可以使用:
%.o: %.c
没有任何食谱。这将调用另外两个规则来从那里创建.S文件和.o文件。但是,它将在创建.o后删除中间.S文件。要防止.S文件被删除,您可以使用:
.PRECIOUS: test.S foo.S
您可以在https://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html#Implicit-Rules了解有关此主题的更多信息。
答案 1 :(得分:0)
您可以使用%.o: %.c
保留规则并cancel内置规则。另请参阅this answer。