绕过make的默认规则

时间:2016-09-22 16:25:54

标签: c makefile cross-compiling

我正在尝试通过汇编程序编译几个.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?

的默认规则

2 个答案:

答案 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