我想禁用特定编译器警告nvcc
,特别是
警告:空引用是不允许的
我工作的代码使用NULL
引用SFINAE的一部分,所以他们无法避免。
一个理想的解决方案将是一个#pragma
在短短我们要禁用警告源文件,而是一个编译器标志也将被罚款,如果存在的话只关闭该警告的问题。
我想禁用特定编译器警告nvcc
,特别是
警告:空引用是不允许的
我工作的代码使用NULL
引用SFINAE的一部分,所以他们无法避免。
一个理想的解决方案将是一个#pragma
在短短我们要禁用警告源文件,而是一个编译器标志也将被罚款,如果存在的话只关闭该警告的问题。
它实际上是可能与NVCC的设备上禁用特定的警告。 我花了好长时间才弄清楚如何做到这一点。
您需要使用-Xcudafe
国旗上列出的令牌结合此页面 。 例如,禁用“控制表达式是恒定”的警告,通过以下操作来NVCC:
-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant"
对于其他的警告,看到上面的链接 。
我想补充约-xcudafe以前的答案(没有足够的声誉还没有发表评论)
你可以像这样编译指示本地来作比较:
#pragma push
#pragma diag_suppress = code_is_unreachable
...
#pragma pop
cudaFE显然是从爱迪生设计集团C ++前端Nvidia的定制版本。 你可以找到的文档在这里讨论: http://www.edg.com/docs/edg_cpp.pdf第75页有诊断编译指令。 仅提及了push和pop在“微软方面”,但我在码(MAC,不MSVC)测试,他们和他们的工作。
编辑:用户手册(5.0版2018年8月)的新版本改变了推/流行语法,并添加新的方法来定位预警严重程度的控制。
新推/流行语法:
#pragma push_macro(“identifier”)
#pragma pop_macro(“identifier”)
你可以看到这个77页的2018年手册(AUG 2018 V 5.0起)。 即推的#pragma产生一个警告,它被忽略 - 我还没有最新版本的CUDA,但@einpoklum指出,只是在做推/流行音乐作为初始后不再有效测试了这个。 同样,如果push_macro / pop_macro工程推/推/弹出弹出内部报表附注我没有测试过。 然而,他们没有通过推/弹出怎么办局部诊断严重性控制走这V5.0说明书的第75页:
下面的例子抑制了A类的声明“毫无意义的朋友宣言”警告:
#pragma diag_suppress 522 class A { friend class A; }; #pragma diag_default 522 class B { friend class B; };
diag_default返回警告使用#pragma到默认状态。 所以在我的例子将是:
#pragma diag_suppress = code_is_unreachable
...
#pragma diag_default = code_is_unreachable
该等号是可选的。
为了加强user2333829的回答是:如果你知道的警告名字,你可以像这样禁用它:
-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant"
如果你不知道这个名字,获得通过编译警告编号:
-Xcudafe --display_error_number
然后用:
-Xcudafe --diag_suppress=<warning_number>
(注:在同一时间两个选项显然不工作)。
我在努力寻找一个匹配-Xcudafe
对我的警告。 因此,这里是另一种方式。
你可以通过一个编译器标志CL.exe
将禁用特定的警告。 例如,要禁用有关未经检查的迭代器,你可以通过警告/wd4996
。
warning C4996: 'std::_Copy_impl': Function call with parameters that may be
unsafe - this call relies on the caller to check that the passed values are
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See
documentation on how to use Visual C++ 'Checked Iterators'
这里的棘手的事情是,默认情况下从主机编译器设置参数不传递给nvcc
,所以你需要通过将其添加CUDA C/C++
对话框。
您可以使用W标志,以抑制警告nvcc -w
我用NVCC与Ubuntu的G ++编译器,在我的情况了openmpi MPIC ++。 为的“-Wunused-结果” g ++编译器对应的消息抑制是“-Wno非占线-结果”。 所以通过它像-Xcompiler的NVCC“-Wno未使用的,结果”为我工作。