我有一个生成文件:

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/

10-10 14:09