我有一个生成文件:
CFLAGS= -Wall -g
all: ex1.c
cc ex1.c -o ex1
valgrind ./ex1
cc ex2.c -o ex2
valgrind ./ex2
cc ex3.c -o ex3
valgrind ./ex3
clean:
rm -f ex1
rm -f ex2
rm -f ex3
是否有任何方法可以简化此操作,使我不必为每个文件添加3行(我期望大约50个文件),而只需插入一个数字,它就会运行该数字的文件命令?所有文件都将具有相同的命名方案
/^ex\d{1,}\.c/
,并且都位于同一目录中。谢谢你的帮助。
最佳答案
不一定需要循环:
CFLAGS= -Wall -g
ALL_EX=ex1 ex2 ex3
all: $(ALL_EX)
ex%: ex%.c
$(CC) $(CFLAGS) [email protected] -o $@
valgrind ./$@
clean: ; rm -f $(ALL_EX)
要添加另一个测试,只需将另一个
exN
添加到ALL_EX
变量。或者,从编译中分离
valgrind
调用:CFLAGS= -Wall -g
ALL_EX=ex1 ex2 ex3
TEST_EX=$(ALL_EX:ex%=test_ex%)
all: $(TEST_EX)
cmp: $(ALL_EX)
ex%: ex%.c
$(CC) $(CFLAGS) [email protected] -o $@
test_ex%: ex%
valgrind ./$<
clean: ; rm -f $(ALL_EX)
这样还可以避免对
ex*.c
文件进行重复的重新编译。最重要的是:通过这种方式,您可以将编译和测试与make -j
并行化。关于c - 简化Makefile中的类似命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37970198/