Makefile - 如何根据前一个命令的退出代码在目标中运行其他命令

问题描述 投票:0回答:1

我正在尝试利用

make
通过生成如下所示的 Makefile 来并行运行一些作业:

test_all: test_1 test_2 test_3

test_1:
    @echo "Starting test 1"
    @run_some_job > test_1.log 2>&1
    # if run_some_job passed, print "Test 1 passed", else print "Test 1 failed"
    
test_2:
    @echo "Starting test 2"
    @run_some_job > test_2.log 2>&1
    # if run_some_job passed, print "Test 2 passed", else print "Test 2 failed"

test_3:
    @echo "Starting test 3"
    @run_some_job > test_3.log 2>&1
    # if run_some_job passed, print "Test 3 passed", else print "Test 3 failed"

我将使用

make -j10
进行调用,以便所有这些并行运行,在各个日志文件中捕获它们的 stdout+stderr。

问题:我怎样才能在上面的评论中做我想做的事情?请注意,这里我只是进行打印,但实际上我可能想根据上一个命令是通过还是失败在下一个命令中执行自定义操作。

if run_some_job passed, print "Test N passed", else print "Test N failed"
makefile gnu-make status
1个回答
0
投票

您必须将其包含在同一个 shell 脚本中。一旦 make 检测到配方中的某些行失败,它将停止运行配方,因此打印“失败”的额外行将永远不会运行。所以你必须自己做检查,像这样:

test_1:
        @echo "Starting test 1"
        if run_some_job > test_1.log 2>&1 ; then \
            print "Test 1 passed"; \
        else \
            print "Test 1 failed"; \
            exit 1; \
        fi
© www.soinside.com 2019 - 2024. All rights reserved.