我正在构建一个运行一系列测试的makefile,并将结果添加到文件中。在makefile中,我将其设置为:
runtests:
rm -f results.txt
cardtest1 > results.txt
cardtest2 >> results.txt
cardtest3 >> results.txt
cardtest4 >> results.txt
unittest1 >> results.txt
unittest2 >> results.txt
unittest3 >> results.txt
unittest4 >> results.txt
现在,我能够以此顺序或任何其他顺序运行上述所有命令(前提是存在附加的results.txt文件)没有问题。但是,无论rm -f results.txt在makefile中运行什么测试,都会产生错误。
flip1 ~/src/dominion-base 161% make all
rm -f results.txt
cardtest1 > results1.txt
make: *** [runtests] Error 1
我一直在修补它一小时(最初全部都是>>但是意识到附加显然不会创建一个不存在的文件),我真的不确定究竟是什么问题我的makefile。
答案 0 :(得分:3)
错误:
make: *** [runtests] Error 1
表示虽然make正在构建目标runtests
,但它运行的其中一个命令退出时出现错误代码1
。在POSIX(和make)中,除0以外的任何退出代码都被视为失败;只有0意味着命令成功。
因此make将检查它调用的程序的退出代码(这是它必须继续进行的唯一事情),如果它不是0则假定命令失败,并且它停止构建。
在上面我会说你的程序cardtest1
退出时退出代码为1.你可以通过运行(从你的shell命令行)来测试它:
cardtest1
echo $?
因为shell将刚刚完成的程序的退出代码放入shell变量$?
。如果它不是0,那么您需要修改cardtest1
程序以确保正确设置退出代码。