我正在从Microsoft Team Foundation Server启动一个版本,如果有任何内容写入stderr,它可以选择使构建失败。 make
向stderr写入警告,即使实际上成功,也会使构建失败。
我浏览了make --help
的输出,但没有发现任何有效的结果:我是否可以阻止编译器警告被写入stderr,但仍然让make通过编写其他排序来使构建失败对stderr的事情?
答案 0 :(得分:1)
它不是GNU make的一部分,因为在GNU上,你可以运行make as
make 2>&1
并获得所需的效果:2>&1
指令只是将标准错误(2)重定向到标准输出(1)。是否适用于TFS取决于它如何调用GNU make。如果默认shell不支持此类重定向,则可能必须添加bash的显式调用,如下所示:
bash -c "make 2>&1"
答案 1 :(得分:0)
所以你想要捕获 make 的stderr,而不是 make 在配方中运行的任何程序的stderr?
这将在一个体面的gnu环境中工作(例如,cygwin)。
概念证明:
using System;
using Android.OS;
using Android.App;
using Android.Views;
using Android.Widget;
using Android.Net.Wifi;
using Android.Content;
using Java.Util;
using Java.Net;
namespace checks
{
[Activity(Label = "checks", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView (Resource.Layout.Main);
Button dataButton = FindViewById<Button>(Resource.Id.connectionDataButton);
dataButton.Click += (object sender, EventArgs e) =>
{
WifiManager wifiManager = (WifiManager)GetSystemService(Context.WifiService);
var d = wifiManager.DhcpInfo;
Console.WriteLine("My IP IS: {0}",d.IpAddress);
};
}
}
}
替换shell(在文件.PHONY: t
t:
$(warning We want this to go to make's stdout)
echo "We want this to go to make's stderr" >&2
中说):
SH
调用:
#!/bin/bash
exec 2>&3
exec bash -"$@"
要查看发生的情况,请在文件中收集fds 1,2和3,然后查看文件。
$ make SHELL=./SH 3>&2 2>&1
所以,$ (make SHELL=./SH 3>&2 2>&1) 1>1 2>2 3>3
$ head 1 2 3
==> 1 <==
Makefile:3: We want this to go to make's stdout
echo "We want this to go to make's stderr" >&2
==> 2 <==
We want this to go to make's stderr
==> 3 <==
去了stdout,任何食谱的stderr仍然去了stderr。啧。