c++ 有没有一种方法可以让makefile编译任何名字文件?

d5vmydt9  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(479)

这是我的makefile:

CC = gcc
all:    #target name
        gcc project.c -o project cs50.c

它只编译名为“project.c”的文件,但我希望它也编译任何其他名称的文件。
例如,如果我的文件名是“test.c”,它可以编译它到“test.exe”,而不改变makefile到“gcc test.c”?
这可能吗?
我试着用 * 替换文件名,但是没有用

pbpqsu0x

pbpqsu0x1#

您要查找的是pattern rules,它在给定模式下可以生成多个输出。例如,如注解中所述,您可以执行以下操作:

%.exe : %.c
   $(CC) $*.c -o $@ cs50.c

如果.c文件有相同的 stem%引用的文件名部分),这将构建任何具有exe扩展名的文件。在这个配方中,$*扩展为茎的名称。(参见Automatic Variables
在上面的规则中,所有文件都将针对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,因为这些可能是您正在寻找的。

相关问题