2013-02-12 101 views
12

編譯器警告我想禁用特定編譯器nvcc警告,特別是如何禁用與NVCC

警告:空引用是不允許

我工作的代碼使用NULL引用是SFINAE的一部分,所以他們無法避免。

一個理想的解決方案是#pragma只在源文件中我們想要禁用警告,但是編譯器標誌也可以,如果存在只關閉有問題的警告。

編輯:我一直和NVIDIA的某個人聯繫過,他們告訴我目前沒有辦法禁用來自設備編譯器的警告。從主機編譯器警告,你可以使用類似以下標誌:

-Xcompiler -Wnonull

我要關閉這個問題作爲一個結果。

+0

你可以'google'是,或讀爲nvcc'手冊。 – 2013-02-12 11:15:56

+1

通過鍵入'nvcc --help'我可以看到有一個'--disable-warnings'選項或同樣'-w'。 – 2013-02-12 11:18:31

+0

謝謝@ Soroosh129。我將編輯我的問題更具體一些:我想要的東西具有更細緻的控制,而不是關閉所有警告消息,因爲警告是一件好事!不幸的是,我一直無法通過使用谷歌或查找手冊來找到這個。 – bcumming 2013-02-12 12:30:06

回答

15

實際上可以使用NVCC禁用設備上的特定警告。我花了很多時間才弄清楚如何去做。

您需要使用-Xcudafe標誌與this page上列出的令牌結合使用。例如,禁用「控制表達式是恆定」的警告,通過以下操作來NVCC:

-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant" 

對於其他警告,請參閱上述link

+0

我無法使用Visual Studio 2012和CUDA 5.5進行設置。 隨着4.2和更舊的工作室它的工作。 順便說一句,在devtalk.nvidia.com上對這個問題進行了討論(結論與此處相同)。請參閱:https://devtalk.nvidia.com/default/topic/370952/disable-a-warning-/ – hthms 2014-03-26 13:30:16

+0

@ user2333829:cudafe除了你提到的列表中的幾個(許多?)其他標記外,米不確定它實際上會接受該列表上的所有內容。你有沒有嘗試過大部分? – einpoklum 2014-04-11 16:26:14

+0

如果您包含像Eigen這樣的圖書館,這個答案是天賜之物,因爲控制表達式警告垃圾郵件使其無法看到任何其他警告。 – Mranz 2014-06-29 18:12:00

1

我努力爲我的警告找到匹配的-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++對話框添加它。

enter image description here

0

您可以使用W標誌,以抑制警告 nvcc -w