Makefile之命令执行选项

       GNU make 支持同时执行多条命令。通常情况下,同一时刻只有一个命令在执行,下一个命令只有在当前命令执行完成之后才能够开始执行。不过可以通过 make 命令行选项“ -j”或者“ --job”来告诉 make 在同一时刻可以允许多条命令同时被执行(注意,在 MS-DOS 中此选项无效,因为它是单任务操作系统)。如果选项“ -j”之后存在一个整数,其含义是告诉 make 在同一时刻可允许同时执行命令的数目。这个数字被称为“ job slots”。当“ -j”选项之后没有出现一个数字时,那么同一时刻执行的命令数目没有要求。使用默认的“ job slots”,值为 1。表示 make将串行的执行规则的命令(同一时刻只能有一条命令被执行)。

       规则中的命令在运行结束后, make 会检测命令执行的返回状态,如果返回成功,那么就启动另外一个子 shell 来执行下一条命令。规则中的所有命令执行完成之后,这个规则就执行完成了。如果一个规则中的某一个命令出错(返回非 0 状态), make就会放弃对当前规则后续命令的执行,也有可能会终止所有规则的执行。一些情况下,规则中一个命令的执行失败并不代表规则执行的错误。例如我们使用“ mkdir”命令来确保存在一个目录。当此目录不存在使我们就建立这个目录,当目录存在时那么“ mkdir”就会执行失败。其实我们并不希望 mkdir 在执行失败后终止规则的执行。为了忽略一些无关命令执行失败的情况,我们可以在命令之前加一个减号“ -(在[Tab]字符之后),来告诉 make 忽略此命令的执行失败。命令中的“ -”号会在 shell解析并执行此命令之前被去掉, shell 所解释的只是纯粹的命令,“ -”字符是由 make来处理的。

      参数“ -n”、“ -t”和“ -q”不影响之前带+号和包含$(MAKE)的命令行的执行当规则命令行中变量MAKE时,可以改变make的“ -t”(“ --touch”),“ -n”(“ --just-print”)和“ -q”(“ --question”)命令行选项的效果。它所实现的功能和在规则中命令行首使用字符“ +”的效果相同。变量“ MAKE”的这个特点是:在规则的命令行中如果使用变量“ MAKE”,标志“ -t”、“ -n”和“ -q”在这个命令的执行中不起作用。尽管这些选项是告诉 make 不执行规则的命令行,但包含变量“ MAKE”的命令行除外,它们会被正常执行

通常, make 在执行命令行之前会把要执行的命令行输出到标准输出设备。我们称之为“回显”,就好像我们在 shell 环境下输入命令执行时一样。但是,如果规则的命令行以字符@开始,则 make 在执行这个命令时就不会回显这个将要被执行的命令






猜你喜欢

转载自blog.csdn.net/q_z_r_s/article/details/80775330