假设我有三个源文件:file3.c
,file2.c
,file3.s
,它们都不具有相同的扩展名。我想将其编译成目标文件:file1.o
,file2.o
,file3.o
,它们具有相同的模式。
OBJ = file1.o file2.o file3.o
all: $(OBJ)
#Here I am in the stuck
$(OBJ) : %.o : %.c #or %.s
$(CC) $(CFLAGS) -c $< -o $@
如何在GNU make中使用模式规则来做到这一点?
答案 0 :(得分:1)
用于生成.o
文件的配方可以通过以下方式用于.c
和.s
文件:
OBJ = file1.o file2.o file3.o
.PHONY: all
all: $(OBJ)
.SECONDEXPANSION:
%.o: $$(wildcard $$*.c) $$(wildcard $$*.s)
$(CC) $(CFLAGS) -c $< -o $@
先决条件,可能以.c
或.s
结尾,由secondary expanding stem确定(即$*
})和wildcard
内置函数,用于将词干连接到相应的&#34;扩展名&#34; .c
和.s
。
&#34;或&#34;是通过利用wildcard
内置函数扩展为 nothing 这一事实来实现的(而不是像Bash shell那样扩展到提供的模式)不匹配(即:如果没有与提供给wildcard
的模式匹配的文件名。)