找不到 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++
和 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
(std::string
)的抱怨在这种情况下是一个毫无意义的警告,因此带来的麻烦多于它的价值。
您可以手动将 -Weffc++
选项添加到 C++ 代码的编译标志中,您可以将其添加到 Apple LLVM X.Y - Custom Compiler Flags
下的选项 Other C++ Flags
(X.Y 取决于您的 XCode) 版本,但基于 LLVM 的编译器同样不会处理该选项。
It looks like the documentation is out of date for this option - I've logged a radar to have the option removed from the docs to prevent this confusion.
我正在使用 Xcode 6.2 构建 C++ 命令行应用程序。
Xcode 构建设置参考指出:
如果您使用 C++ 开发产品,您可能需要在目标中自定义这些构建设置:
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(有效的 C++ 违规)
但是这个选项没有出现在我的任何目标的构建设置列表中。
谁能告诉我它在哪里?
有问题的设置不再有任何影响 - 如果将其放入 pbxproj 文件,它会在 UI.
中显示为用户定义的设置该设置仅适用于 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
(std::string
)的抱怨在这种情况下是一个毫无意义的警告,因此带来的麻烦多于它的价值。
您可以手动将 -Weffc++
选项添加到 C++ 代码的编译标志中,您可以将其添加到 Apple LLVM X.Y - Custom Compiler Flags
下的选项 Other C++ Flags
(X.Y 取决于您的 XCode) 版本,但基于 LLVM 的编译器同样不会处理该选项。
It looks like the documentation is out of date for this option - I've logged a radar to have the option removed from the docs to prevent this confusion.