我正在使用Xcode 6.2構建C++命令行應用程序。找不到Xcode構建設置 - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS
Xcode的構建設置參考指出:
如果你用C開發的產品++,你可能需要定製這些構建設置你的目標:
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(C++有效處罰)
但是,此選項不會出現在我的任何目標的構建設置列表中。
誰能告訴我它在哪裏?
我正在使用Xcode 6.2構建C++命令行應用程序。找不到Xcode構建設置 - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS
Xcode的構建設置參考指出:
如果你用C開發的產品++,你可能需要定製這些構建設置你的目標:
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(C++有效處罰)
但是,此選項不會出現在我的任何目標的構建設置列表中。
誰能告訴我它在哪裏?
相關設置不再有任何作用 - 如果將其放置到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編譯器沒有按不處理該選項。
它看起來像文件是過時的這個選項 - 我已經登錄雷達,從文檔中刪除選項,以防止這種混淆。
感謝您的回覆。 – ksl 2015-03-26 15:55:31
如果有一個字段提供額外的編譯器選項,您可以通過在該字段中添加'-WeffC++'來指定它。但我認爲只有GCC支持它Xcode 6.2可能默認爲clang。 – Eelke 2015-03-25 15:21:43