我通常喜欢在编程时启用很多警告。但是,某些库包含容易导致警告的代码(..,python,Qt,..)。使用gcc编译时,我可以使用-isystem而不是-I来静音。我怎么能用MS编译器做同样的事情?我知道警告#pragma,但我想要一个不涉及编译器特定代码的解决方案。我也知道我可以关闭特定的警告,但这也不是我想要的。
BTW:isystem应该是这个问题的标签,但我不被允许这样做..摘要:我希望从我的代码中看到所有警告,并且从外部代码中看到 no 警告。
答案 0 :(得分:6)
截至2017-08-17,这似乎仍然不可能。
我在这里添加了一个功能请求:
更新2018年:
此问题现已关闭,已在固定状态下提供,并且可在标准MS VS安装[source]中使用。 MS团队的博客文章介绍了新功能[here]。
MS的解决方案非常灵活。您不仅可以像使用--isystem
一样区分路径,还可以使用#include ""
或#include <>
来区分路径。博客文章值得一读,以查看所有各种自定义点。
最后警告也可以在MS VS平台上使用。
答案 1 :(得分:1)
不,MSVC没有等效的-isystem
。
查看cl /的输出输出? :
/ wd禁用警告n
/我们将警告n视为错误
/ wo发出警告n一次
/ w为n
设置警告级别1-4
请注意,这会禁用整个项目的警告;我记得在使用Qt时,我宁愿用#pragma warning disable更改它的主标题,并在最后再次启用,这样我仍然可以看到我自己的源的所有警告。
编辑作者编辑了他的问题,更新了答案:无法使用编译器标志在没有警告的情况下使用警告和Qt代码获取代码:您将如何告诉编译器什么是'你的'代码?
请注意,上述标志也可以在文件级别应用,因此这样您就可以仅为那些包含Qt标头的文件禁用警告,但仍然意味着您不能看看他们在那些文件中的代码。
所以我坚持上面的答案;它不是很漂亮,但我很确定这是唯一的方法:在Qt标题的开头和结尾使用#pragma。要么改变Qt标题(甚至更难看),要么选择这样的侵入性较小的方式:
//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"
示例“shutuppqt.h”
#ifdef MSVC
#pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
//....
#endif
示例“enableallwarnings.h”
#ifdef MSVC
#pragma warning ( enable : 4222 ) //or default instead of enable
#else
//....
#endif
答案 2 :(得分:1)
不知道为什么MS从未接受过这个。 我们只能在https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-s
上投票答案 3 :(得分:1)
这现在存在于/experimental:external /external:I system_include_path /external:W0
下。有关详细信息,请参阅https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/。