如何在 Codelite 中启用 C++11 特性
How to Enable C++11 Features in Codelite
以下代码在 Xcode 5 和 Visual Studio 2013 中编译并运行。我有兴趣试用 Codelite,但 Codelite 不会编译以下程序(这是我工作时的问题在我的项目中使用范围枚举)。据我了解,Codelite 使用与 Xcode.
相同的编译器
代码是否符合 C++11 的要求?为什么Codelite无法编译?
#include <iostream>
namespace abc
{
namespace xyz
{
enum class SampleEnum
{
SomeValue = 0,
SomeOtherValue = 1
};
}
}
int main(int argc, char **argv)
{
abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
return 0;
}
这是 Codelite 的构建输出。万一它是乱码,它指向变量实例化中的单词 "SampleEnum" 并说 "expected a class or namespace".
/bin/sh -c 'make -j8 -e -f Makefile'
----------Building project:[ ClangTest - Debug ]----------
codelite-cc /usr/bin/clang++ -c "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I.
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
enum class SampleEnum
^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: expected a class or namespace
abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
~~~~~~~~~~^
1 warning and 1 error generated.
make[1]: *** [Debug/main.cpp.o] Error 1
make: *** [All] Error 2
2 errors, 1 warnings
如果您使用的是 C++11 扩展,编译器希望对其进行标记。没有它,他们可能会抛出警告和错误。那是因为 C++11 的一些更改不向后兼容,例如使用 auto
.
例如,在 gcc 中你应该有
gcc -std=c++11
检查你的编译器是否也不应该有这样的参数!
需要将 -std=c++11 传递给编译器以启用 C++11 功能。以下是在 Codelite 中执行此操作的步骤:
- 在工作区视图中右键单击项目。
- Select 此弹出菜单底部附近的设置。通用设置->编译器->C++编译器选项
- 单击以分号分隔的编译器开关列表以显示省略号并单击省略号。
- 单击 -std=c++11 的复选框
我想这是因为您的默认标准版本不是 c++11。要更改为 c++11,如果您使用的是终端,则应输入以下命令:
g++ yourfile.cpp -std=c++11
以下代码在 Xcode 5 和 Visual Studio 2013 中编译并运行。我有兴趣试用 Codelite,但 Codelite 不会编译以下程序(这是我工作时的问题在我的项目中使用范围枚举)。据我了解,Codelite 使用与 Xcode.
相同的编译器代码是否符合 C++11 的要求?为什么Codelite无法编译?
#include <iostream>
namespace abc
{
namespace xyz
{
enum class SampleEnum
{
SomeValue = 0,
SomeOtherValue = 1
};
}
}
int main(int argc, char **argv)
{
abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
return 0;
}
这是 Codelite 的构建输出。万一它是乱码,它指向变量实例化中的单词 "SampleEnum" 并说 "expected a class or namespace".
/bin/sh -c 'make -j8 -e -f Makefile'
----------Building project:[ ClangTest - Debug ]----------
codelite-cc /usr/bin/clang++ -c "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I.
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
enum class SampleEnum
^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: expected a class or namespace
abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
~~~~~~~~~~^
1 warning and 1 error generated.
make[1]: *** [Debug/main.cpp.o] Error 1
make: *** [All] Error 2
2 errors, 1 warnings
如果您使用的是 C++11 扩展,编译器希望对其进行标记。没有它,他们可能会抛出警告和错误。那是因为 C++11 的一些更改不向后兼容,例如使用 auto
.
例如,在 gcc 中你应该有
gcc -std=c++11
检查你的编译器是否也不应该有这样的参数!
需要将 -std=c++11 传递给编译器以启用 C++11 功能。以下是在 Codelite 中执行此操作的步骤:
- 在工作区视图中右键单击项目。
- Select 此弹出菜单底部附近的设置。通用设置->编译器->C++编译器选项
- 单击以分号分隔的编译器开关列表以显示省略号并单击省略号。
- 单击 -std=c++11 的复选框
我想这是因为您的默认标准版本不是 c++11。要更改为 c++11,如果您使用的是终端,则应输入以下命令:
g++ yourfile.cpp -std=c++11