从bash脚本调用make不会

时间:2010-11-20 03:31:55

标签: bash shell makefile

我正在编写一个shell脚本,它迭代一组变量,根据当前迭代值逐行编辑源文件,然后重新编译,最后调用刚刚编译的二进制文件。执行后,旧线路将恢复。

这是一个片段:

#!/bin/sh
for i in 0..4; do
    perl -i -pe "s/.*/{SUBS[$i]}/ if $. == ${LINE[$i]}" ${SOURCE}
    make
    ./bin/myTool
    perl -i -pe "s/.*/\/\/{SUBS[$i]}/ if $. == ${LINE[$i]}" ${SOURCE}
done

基本上我在C ++源文件中有大约10个互斥#define,我正在试验每个的效果。由于我很懒,我想把它变成一个自动化过程,在这里我卡住了。

有时会发生shell说:

`make: Nothing to be done for 'all'`

现在,我尝试diff每个perl指令之前和之后的文件,文件确实显示正确...我无法弄清楚为什么会发生这种情况以及如何使其行为正确。

有什么想法吗?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

对于make来说,它可能循环太快,无法区分每个迭代。删除make产品或在循环的开头或结尾添加2秒的延迟。

答案 1 :(得分:1)

仅检查目标时间戳是否小于源时间戳。这是它能够知道需要更新的唯一方式。因此,如果循环迭代花费不到一秒钟,那么make就不会知道任何事情发生了变化。

您可以在每次迭代的顶部进行清理,也可以像Ignacio Vazquez-Abrams所说的那样添加延迟。