确保构建后步骤运行

时间:2014-06-17 19:34:11

标签: makefile

如果之前有人问我,我很抱歉,我今天刚刚开始搞乱Makefiles。

所以我试图在运行一组测试之前/之后使用Makefile导入和删除测试数据库。目前这两个步骤都在运行,但是只有在运行测试时没有问题时才会运行测试后步骤。

REPORTER = nyan

.PHONY: test

pre-test:
    echo "PRE STUFF"

test: pre-test
    @NODE_ENV=test ./node_modules/.bin/mocha \
        ./test \
        --recursive \
        --reporter $(REPORTER)

post-build: test
    echo "AFTER STUFF"

我如何理解它的语法是这样的:

<task> : <task prereq's>

我想问题是其中一个步骤出现了&#34;失败&#34;到make,所以它不会继续吗?

1 个答案:

答案 0 :(得分:4)

你的句子然而,只有在运行测试没有问题时才会运行后测试并不真正解析。如果您清楚地说明您想要的行为是什么,并清楚地描述您获得的行为,那将会很有帮助。

另外,我假设上面的makefile你正在运行make post-build,否则只会运行pre-test ...?

你是对的,如果目标的先决条件失败,那么目标本身将不会被make运行。

对于上面的示例,我建议您将前后步骤放入相同的配方中。如果它们很复杂并且您想在多个规则中使用它们,则可以将命令放入变量中:

PRE-TEST = echo "PRE STUFF"
POST-TEST = echo "AFTER STUFF"

test:
        $(PRE-TEST)
        @NODE_ENV=test ./node_modules/.bin/mocha \
            ./test \
            --recursive \
            --reporter $(REPORTER); \
         result=$$?; \
         $(POST-TEST); \
         exit $$result