如何使警告在视觉工作室中持续存在
Posted
技术标签:
【中文标题】如何使警告在视觉工作室中持续存在【英文标题】:How to make warnings persist in visual studio 【发布时间】:2008-12-21 20:10:24 【问题描述】:假设我有文件a.cpp
和b.cpp
,我在a.cpp
中收到警告,在b.cpp
中收到错误消息。我修复了b.cpp
中的错误并重新编译——因为Visual Studio 不必重新编译a.cpp
,它不会提醒我之前发现的警告。
我想以某种方式让警告持续存在;但是,我不希望它把警告视为错误(我希望它仍然编译/运行,即使有警告)。这可能吗?
【问题讨论】:
【参考方案1】:您可以进入项目设置并在 C/C++ 选项卡(类别:常规)中将所有警告设置为错误。
【讨论】:
这是我不想做的! (请阅读帖子!) 你总是可以使用 REBUILD ALL 而不是仅仅构建。【参考方案2】:基本上,你运气不好。 C++ 编译将丢弃所有错误和警告。因为它只重新编译缺少 .OBJ 文件的 .CPP 文件(即上次出现错误和失败的文件),所以您只会看到错误。
您有几个选择。在我脑海中浮现:
编写一个响应构建完成事件的宏。如果它看到任何警告,它可以删除 .OBJ 文件。 .CPP 文件将在下次再次编译。不幸的是,这意味着如果不重新编译,您的程序可能无法运行。 您可以编写一个以另一种方式工作的宏:在构建开始时,查看是否有任何警告,然后删除 .OBJ 文件。 编写一个 VS 插件,在 .CPP 文件再次编译之前记住警告。【讨论】:
我要么写一个插件,要么就按照 Tim 说的处理它。【参考方案3】:正如 Hernan 已经说过的,添加一个自定义构建步骤,该步骤会复制包含构建结果(警告)的中间文件。不确定如何为此命名,但您可以创建一个 bat 文件,作为自定义构建步骤调用。
为什么要保存警告超出了我的范围。将它们视为错误,或忽略它们或编译指示/禁用它们。
【讨论】:
【参考方案4】:重建您的项目或仅重新编译 a.cpp 文件。警告由编译器输出,因此您不会收到当前编译中未包含的文件的警告。
您可以将当前构建输出保存到“输出”窗格并按 Ctrl+S(如果我记错了,默认为 output-build.txt。)
在您的项目设置中,我认为构建输出消息可以保存在文件中。检查它并告诉你的结果。
干杯
【讨论】:
但是我不想重新编译a.cpp,我只想告诉编译器把之前找到的东西吐出来。 输出窗口-> ctrl+S 保存“输出”,我认为您可以在您的项目设置中自动执行此操作。 :) 但是在这里,我宁愿不必记住每次都保存输出,然后必须搜索一些 .txt 文件(这不一定会有漂亮的点击和 -去能力)。【参考方案5】:鉴于您不想重新编译导致警告的文件,您可能需要编写一个小实用程序来过滤编译器的输出以查找警告并将它们作为 / 写入 .cpp 文件/TODO 评论。
然后 IDE 会将它们放入待办事项列表中。
我不知道有什么开箱即用的方法,但它可能不会太难。
如果您不希望实用程序处理实际的源文件(我不确定我是否会这样做),您可能希望让它将 //TODO cmets 写入一个虚拟的“todo.cpp”文件并在项目中拥有该文件。然后它们将显示在待办事项列表中,并且由于文件只是 cmets,因此不会影响构建。只需确保该实用程序很聪明,不会将重复项添加到列表中。可以编写一个宏来将您从 todo.cpp 行带到相应的实际警告位置。
【讨论】:
【参考方案6】:我强烈建议您在运行时尽可能多地发出警告,当然在您自己编写的所有代码中也是如此。在这里和现在修复警告要容易得多,而不是等到以后再尝试一次完成所有警告。
您希望将警告作为错误运行的原因有多种:
大多数警告实际上表明您的代码存在问题。 如果您有很多警告,您不会注意到中间是否出现了新警告。我经常看到这种情况发生。 如果有您认为是虚假的警告或由于某种原因无法立即修复,您可以将其关闭。使用 /w 选项或合适的#pragma。请注意,您只能将其切换到特定文件,甚至可以在代码中的特定位置切换。如果您在编译时仍需要通知,但在此处显示#pragma 消息。 如果存在您无法控制的代码,但您只需将其编译到您的程序中,为该特定模块或源文件切换警告,或者甚至在不使用 /WX 的情况下运行它。很可能您并没有修改代码,所以第 2 点可能不太相关。我真的看不出任何不使用 /WX(或 -Werror)运行的正当理由。
【讨论】:
以上是关于如何使警告在视觉工作室中持续存在的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Eslint/Prettier 在 ci 环境中出现错误和警告时失败?