找不到 Xcode 构建设置 - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS
Can't find Xcode build setting - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS
我正在使用Xcode 6.2构建一个C++命令行应用程序。
Xcode构建设置参考状态:
如果您使用C++开发产品,您可能需要在目标中自定义这些构建设置:
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(有效的C++违规)
但是,此选项不会出现在我的任何目标的生成设置列表中。
有人能告诉我它在哪里吗?
有问题的设置不再有任何效果-如果将其放入pbxproj文件中,它将在UI中显示为用户定义的设置。
该设置仅适用于gnu g++
编译器,xcode不再随该编译器一起提供(它随clang++
和调用clang++
的g++
包装器一起提供)。用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
(一个std::string
)是一个毫无意义的警告,因此麻烦比它的价值更大。
您可以手动将-Weffc++
选项添加到C++代码的编译标志中,也可以将其添加到Apple LLVM X.Y - Custom Compiler Flags
下的选项Other C++ Flags
中(X.Y取决于XCode的版本),但基于LLVM的编译器不会处理该选项。
这个选项的文档似乎已经过时了——我已经记录了一个雷达,从文档中删除了这个选项,以防止这种混乱。
相关文章:
- 我如何允许向量传递到info(),capture(),warn()等,同时避免非法扩展std名称空间
- lock_guard的有效放置-来自Effective Modern C++的第16项
- 如何不擦除迭代器(从"Effective STL")
- 为什么在Effective C++中声明和定义是这样定义的
- 从Bloch的Effective Java in C++实现类型安全的异构容器(VS2010)
- C++:斯科特·迈耶斯 "Effective STL":第 31 项:了解您的排序选项:帮助理解
- Effective c++,第三版:重载const函数
- 明广的'Effective C++'警告
- WARN:变量不能绑定(它要么不存在,要么已经被优化掉了)
- 在c++中返回局部变量(Effective c++第3版规则21)
- 以有状态策略类为代价解耦宿主类和策略类,并且不遵循Effective c++的第26条
- 如何将 warn() 的输出转换为字符串?