2015-03-25 93 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