我有一个makefile:
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/
,并且都在同一目录中。
感谢您的帮助。
答案 0 :(得分:5)
您不一定需要循环:
CFLAGS= -Wall -g
ALL_EX=ex1 ex2 ex3
all: $(ALL_EX)
ex%: ex%.c
$(CC) $(CFLAGS) $@.c -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) $@.c -o $@
test_ex%: ex%
valgrind ./$<
clean: ; rm -f $(ALL_EX)
这样你也可以避免冗余重新编译ex*.c
文件。最重要的是:通过这种方式,您可以使用make -j
将编译和测试并行化。