Make
Make - 如何在不抑制其他輸出的情況下抑制 make 錯誤消息
我正在實現一個簡單的建構系統,它實際上只是 Make 的一個包裝器。由於這個建構系統已經發出了自己的錯誤消息,我不希望 Make 產生像這樣的錯誤消息
make: *** [/cool/makefile:116: /fun/target.o] Error 1
關於失敗。
我已經在使用該
-s
標誌來抑制 Make 的大部分輸出。而且我不希望 Make 忽略錯誤;我仍然希望它停止並以狀態退出。我不能僅僅殺死所有錯誤輸出,make 2> /dev/null
因為我仍然希望看到stderr
Make 正在執行的任務列印的消息。有沒有辦法在不手動解析和清理 Make 輸出的情況下做到這一點?我正在使用 GNU Make 4.2.1,我不介意 GNU Make 特定的解決方案。
由於您的系統是 make 的包裝器,因此我認為它會生成 makefile。調整您的生成器以添加
2>&3
到 makefile 中的所有 shell 命令,並使您的程序將文件描述符 3 重定向到標準錯誤(文件描述符 2)和文件描述符 2 到/dev/null
. 這樣,make 程序本身將列印到其標準錯誤,該錯誤轉到/dev/null
,而建構命令將列印到其標準錯誤,該標準錯誤轉到包裝器的標準錯誤。如果您使用的是手寫的makefile,您可以對其進行轉換以添加這些重定向,假設makefile 的語法不會過於瘋狂(例如,沒有生成命令的花哨的GNU make 宏)。
@
對於以製表符和可選的or開頭的每一行,-
並且前一行不以反斜杠結尾,exec 2>&3;
在製表符和可選的之後添加@-
。您可以使用參數呼叫它,而不是更改 makefile,
SHELL=/path/to/shell_wrapper
其中shell_wrapper
is 執行其參數並將標準錯誤重定向到不同的描述符,如下所示:#!/bin/sh eval "$2" 2>&3