如何编写可以接受CMD行中的参数的Makefile

时间:2018-09-23 22:03:44

标签: c linux makefile gnu-make

所以我正在努力实现自己的类似于链表的数据结构 并且我已经创建了一个生成文件,该文件用测试用例文件编译我的.c文件,该用例文件检查我的实现是否行为正确

原本我的make文件现在可以正常工作,但是如果我需要更改测试用例,则必须手动编辑我的make文件

test:
        gcc -o test LL.c testcase00.c -g
        ./test

clean:
        rm test

我想知道是否有一种方法可以传递我在调用make时要测试的测试用例的编号,就像make 05会自动编译我的LL.c testcase05.c并假设所有文件都在同一目录中。

谢谢!

3 个答案:

答案 0 :(得分:1)

下面的makefile文件将生成一个可执行文件testcase,该文件由其中一个测试用例的目标文件组成。

make TEST_ID=02一样被调用时,它将使用testcase02.c

这不是依靠gmake明确规则(通常是有效的)来明确宣布编译规则。

.PHONY: all
all: testcase

testcase: testcase$(TEST_ID).o
    @echo "making test $(TEST_ID)..."
    gcc $(LDFLAGS) -o $@ $^

或者,如果您需要一起构建和运行,则可以使其更加简单(对所有内容使用隐式,它将生成并运行名为testcase$(TEST_ID)的可执行文件):

.PHONY: all
all: testcase$(TEST_ID)
    @echo "running test $(TEST_ID)..."
    $^

答案 1 :(得分:0)

  

bash $ make NN = 05

在Makefile中:

SRC=testcase$(NN).c
test:
    gcc -o test LL.c $(SRC) -g

答案 2 :(得分:0)

on_enter

在此生成文件# default testcase case ?= 00 test: gcc -o test LL.c testcase$(case).c -g ./test clean: rm test 中设置默认变量名。环境变量和命令行将覆盖此默认值。所以

case ?= 00

将使用make

testcase00.c

将使用make case=05

testcase05.c

将使用export case=07 make