这是我的makefile:
CC = gcc all: #target name gcc project.c -o project cs50.c
它只编译名为“project.c”的文件,但我希望它也编译任何其他名称的文件。例如,如果我的文件名是“test.c”,它可以编译它到“test.exe”,而不改变makefile到“gcc test.c”?这可能吗?我试着用 * 替换文件名,但是没有用
pbpqsu0x1#
您要查找的是pattern rules,它在给定模式下可以生成多个输出。例如,如注解中所述,您可以执行以下操作:
%.exe : %.c $(CC) $*.c -o $@ cs50.c
如果.c文件有相同的 stem(%引用的文件名部分),这将构建任何具有exe扩展名的文件。在这个配方中,$*扩展为茎的名称。(参见Automatic Variables)在上面的规则中,所有文件都将针对cs50.c进行编译。如果你想拥有一些特定于目标的文件列表,你可以这样做:
.c
%
exe
$*
cs50.c
.PHONY: all all: project.exe: EXTRA_FILES_project := cs50.c EXTRA_FILES_blah := blah.c %.exe : %.c $(CC) $*.c -o $@ $(EXTRA_FILES_$*)
请注意,默认情况下,已经有许多Implicit Pattern Rules描述了如何从.c文件生成.o文件等。还有很多其他的技巧。您可能还想阅读Static Pattern Rules,因为这些可能是您正在寻找的。
1条答案
按热度按时间pbpqsu0x1#
您要查找的是pattern rules,它在给定模式下可以生成多个输出。例如,如注解中所述,您可以执行以下操作:
如果
.c
文件有相同的 stem(%
引用的文件名部分),这将构建任何具有exe
扩展名的文件。在这个配方中,$*
扩展为茎的名称。(参见Automatic Variables)在上面的规则中,所有文件都将针对
cs50.c
进行编译。如果你想拥有一些特定于目标的文件列表,你可以这样做:请注意,默认情况下,已经有许多Implicit Pattern Rules描述了如何从.c文件生成.o文件等。还有很多其他的技巧。您可能还想阅读Static Pattern Rules,因为这些可能是您正在寻找的。