C++ 如果我输出“VS2013构建失败”;“错误”;在后期构建步骤中-我认为

C++ 如果我输出“VS2013构建失败”;“错误”;在后期构建步骤中-我认为,c++,visual-studio-2013,C++,Visual Studio 2013,这有点奇怪,我试着用谷歌搜索,但运气不太好。另外,我为长期的导入道歉。。。但我认为所有的信息都是了解发生了什么所必需的 我使用Visual Studio 2013在C++中工作,并且我有自己的单元测试实现。测试项目是解决方案的一部分,有一个生成后事件运行它们(使用刚生成的可执行文件),如果该事件甚至返回非0,则生成失败(应该如此) 我还有自己的基于宏的输出系统,它使用OutputDebugString打印到开发环境中的输出窗口,因此我可以使用如下语句: AI_ERROR("Some ERROR

这有点奇怪,我试着用谷歌搜索,但运气不太好。另外,我为长期的导入道歉。。。但我认为所有的信息都是了解发生了什么所必需的

我使用Visual Studio 2013在C++中工作,并且我有自己的单元测试实现。测试项目是解决方案的一部分,有一个生成后事件运行它们(使用刚生成的可执行文件),如果该事件甚至返回非0,则生成失败(应该如此)

我还有自己的基于宏的输出系统,它使用OutputDebugString打印到开发环境中的输出窗口,因此我可以使用如下语句:

AI_ERROR("Some ERROR message with C-style %s", "arguments");
AI_WARN("Some ERROR message with C-style %s", "arguments");
AI_LOG("Some ERROR message with C-style %s", "arguments");
AI_ERROR_CONFIG("Some ERROR message with C-style %s", "arguments");
AI_WARN_CONFIG("Some ERROR message with C-style %s", "arguments");
AI_LOG_CONFIG("Some ERROR message with C-style %s", "arguments");
当我直接运行可执行文件时,将产生此输出:

(0.0000) tesaitest.cpp:87 ERROR: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:88 WARNING: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:89 LOG: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:90 ERROR (CONFIGURATION): Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:91 WARNING (CONFIGURATION): Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:92 LOG (CONFIGURATION): Some ERROR message with C-style arguments
这一切都起作用了——到目前为止还不错

这里有点奇怪。如果我直接为测试运行可执行文件,它就会运行,它会打印我上面显示的消息,并返回0——这是预期的,因为我从未编写过任何代码来执行任何不同的操作。但是,当我编译并且测试作为构建后事件运行时,它返回-1。如果我注释掉这两条错误消息(AI_error和AI_error_CONFIG),那么它将返回0,即使输出字符串中仍然包含单词“error”。这实际上是我想要的行为-但这是一个多编译器项目,我想确保执行是一致的,所以我想确保我是实现它的人,而不仅仅是开发环境为我做的

我注意到的另一件事是,在我编译时得到的输出中,“error”和“warning”是小写的,但“log”不是,而且在原始代码中它们不是小写的。以下是该输出的外观:

1>(0.0000) tesaitest.cpp : 87 error : Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 88 warning : Some ERROR message with C-style arguments
1>  (0.0000) tesaitest.cpp:89 LOG: Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 90 error (CONFIGURATION): Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 91 warning (CONFIGURATION): Some ERROR message with C-style arguments
1>  (0.0000) tesaitest.cpp:92 LOG (CONFIGURATION): Some ERROR message with C-style arguments
字符串的这一部分作为枚举(Error或ConfigError)传递到print函数中,但在传递到OutputDebugString之前,我使用vsnprintf_将整个消息编译到单个字符缓冲区中

当然,为了增加乐趣,因为这只发生在编译期间,而不是直接运行可执行文件时,我无法在调试器中捕获它


所以。。。有人知道MS是如何/为什么确定这些是错误并更改返回值的吗?有一个可以关闭的设置吗?正如我所说的,由于这是一个多编译器项目,也因为我可能希望能够出现错误消息实际上并不代表失败测试的情况(即,我希望测试错误消息以在错误输入时生成),我宁愿我完全控制返回值…

我不知道返回值。关于大写问题,请检查您的加载项。我使用的是一个彩色输出,它检测单词“error”和“warning”,并改变整行的颜色。它没有检查行的语法:只是查找错误/警告。我非常确定VisualAssist是我唯一的插件。虽然这听起来很不错,但在我的“坚果”列表中,有一个地方正在尝试将输出着色