2015-03-25 87 views
0

我正在使用Xcode 6.2構建C++命令行應用程序。找不到Xcode構建設置 - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS

Xcode的構建設置參考指出:

如果你用C開發的產品++,你可能需要定製這些構建設置你的目標:

GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(C++有效處罰)

但是,此選項不會出現在我的任何目標的構建設置列表中。

誰能告訴我它在哪裏?

+0

如果有一個字段提供額外的編譯器選項,您可以通過在該字段中添加'-WeffC++'來指定它。但我認爲只有GCC支持它Xcode 6.2可能默認爲clang。 – Eelke 2015-03-25 15:21:43

回答

1

相關設置不再有任何作用 - 如果將其放置到pbxproj文件中,它將顯示爲用戶界面中的用戶定義設置。

的設置僅適用於GNU編譯器g++和Xcode中不會與任何編譯器更多(它附帶clang++g++包裝調用clang++)發貨。的,與g++引發一些條件簡易測試不clang++例如爲:觸發

#include <string> 

using std::string; 

class foo { 
    string x; 
    int y; 
    void *ptr; 

public: 
    foo() : y(1), ptr(0) {} 
}; 

$ g++-4.9 -c -Weffc++ evil.cpp 
evil.cpp:5:7: warning: 'class foo' has pointer data members [-Weffc++] 
class foo { 
    ^
evil.cpp:5:7: warning: but does not override 'foo(const foo&)' [-Weffc++] 
evil.cpp:5:7: warning: or 'operator=(const foo&)' [-Weffc++] 
evil.cpp: In constructor 'foo::foo()': 
evil.cpp:11:5: warning: 'foo::x' should be initialized in the member initialization list [-Weffc++] 
    foo() : y(1), ptr(0) {} 
    ^
$ clang++ -c -Weffc++ evil.cpp 
$ 

有觀點認爲太吵是有用的 - 例如,關於未初始化x(a std::string)的投訴在這種情況下是毫無意義的警告,因此更麻煩。

您可以手動將-Weffc++選項添加到編譯選項爲C++代碼,你可以將其添加到選項Other C++ Flags,這是Apple LLVM X.Y - Custom Compiler Flags下(在XY取決於您的Xcode的版本),但同樣基於LLVM編譯器沒有按不處理該選項。

它看起來像文件是過時的這個選項 - 我已經登錄雷達,從文檔中刪除選項,以防止這種混淆。

+0

感謝您的回覆。 – ksl 2015-03-26 15:55:31