如何在不修改 makefile 的情况下让 gmake 为所有命令输出 return 代码
How can I get gmake to output return codes for all commands without modifying makefile
如何在不修改 Makefile
的情况下让 gmake
输出所有命令的退出状态码?如果修改 Makefile
是一个选项,则可能会出现如下情况:
$(CC) -c -o $@ $< $(CFLAGS); echo $$?
到目前为止我发现的另一种方法是包装命令 运行。例如,如果
gcc -o $@ $^ $(CFLAGS) $(LIBS)
是命令运行,当前目录.
在PATH
变量前面,那么就可以在当前目录下创建一个名为gcc
的脚本包含以下内容的目录:
/usr/bin/gcc "$@"; echo $?
我想知道是否有更好、更简洁、更优雅的解决方案?
如果任何命令 returns 非零,Make 将失败,并打印非零退出代码。因此,对于任何没有打印退出代码的命令,您已经知道它是什么 - 零。如果仅仅拥有这些知识是不够的,那么修复它是很容易的。如果您可以区分打印和其他输出的命令,您可以很容易地 运行 一个 sed
脚本将 0
粘贴在成功命令的正确位置。
请注意,您建议的所有解决方法都已失效:因为您现在 运行 echo
作为配方中的最后一个命令,配方将始终以 return 代码退出echo
,这总是成功的。如果您按照描述进行更改,换句话说,make 将不再检测任何构建失败并将每个命令都视为成功。
要完成这项工作,您必须编写如下内容:
$(CC) -c -o $@ $< $(CFLAGS); r=$$?; echo $$r; exit $$r
我能想到的唯一 "clean" 方法是在不更改 makefile 的情况下执行此操作,但仍处理所有不同的目标,就是更改 SHELL
make uses with your one of your拥有你想要的行为。不幸的是,这有点棘手,但这样的事情应该有效:
$ cat shexit
#!/bin/sh
/bin/sh "$@"
r=$?
echo $r
exit $r
$ chmod 755 shexit
$ make SHELL=$(pwd)/shexit
如何在不修改 Makefile
的情况下让 gmake
输出所有命令的退出状态码?如果修改 Makefile
是一个选项,则可能会出现如下情况:
$(CC) -c -o $@ $< $(CFLAGS); echo $$?
到目前为止我发现的另一种方法是包装命令 运行。例如,如果
gcc -o $@ $^ $(CFLAGS) $(LIBS)
是命令运行,当前目录.
在PATH
变量前面,那么就可以在当前目录下创建一个名为gcc
的脚本包含以下内容的目录:
/usr/bin/gcc "$@"; echo $?
我想知道是否有更好、更简洁、更优雅的解决方案?
如果任何命令 returns 非零,Make 将失败,并打印非零退出代码。因此,对于任何没有打印退出代码的命令,您已经知道它是什么 - 零。如果仅仅拥有这些知识是不够的,那么修复它是很容易的。如果您可以区分打印和其他输出的命令,您可以很容易地 运行 一个 sed
脚本将 0
粘贴在成功命令的正确位置。
请注意,您建议的所有解决方法都已失效:因为您现在 运行 echo
作为配方中的最后一个命令,配方将始终以 return 代码退出echo
,这总是成功的。如果您按照描述进行更改,换句话说,make 将不再检测任何构建失败并将每个命令都视为成功。
要完成这项工作,您必须编写如下内容:
$(CC) -c -o $@ $< $(CFLAGS); r=$$?; echo $$r; exit $$r
我能想到的唯一 "clean" 方法是在不更改 makefile 的情况下执行此操作,但仍处理所有不同的目标,就是更改 SHELL
make uses with your one of your拥有你想要的行为。不幸的是,这有点棘手,但这样的事情应该有效:
$ cat shexit
#!/bin/sh
/bin/sh "$@"
r=$?
echo $r
exit $r
$ chmod 755 shexit
$ make SHELL=$(pwd)/shexit