我最近开始学习C ++,因为我在Linux上,所以我正在使用G ++进行编译。
现在,我正在关注的教程说
如果您碰巧拥有开发的Linux或Mac环境 功能,您应该能够直接编译任何示例 从一个终端只是通过在命令中包含C ++ 11标志 编译器:
并告诉我使用此命令进行编译:{{1}}。
现在,我想知道,g++ -std=c++0x MY_CODE.cpp -o MY_APP
旗帜有什么意义?是必需的,还是我可以运行std=c++0x
?
答案 0 :(得分:11)
默认情况下,GCC编译C ++ - gnu++98
的代码,这是一种说C ++ 98标准加上大量gnu扩展的奇特方式。
您使用-std=???
向编译器说出应该遵循的标准
不要忽略-pedantic
,否则会忽视标准一致性。
您可以选择的选项:
standard with gnu extensions
c++98 gnu++98
c++03 gnu++03
c++11 (c++0x) gnu++11 (gnu++0x)
c++14 (c++1y) gnu++14 (gnu++1y)
即将到来:
c++1z gnu++1z (Planned for release sometime in 2017, might even make it.)
GCC手册:https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Standards.html#Standards
此外,请求完整警告,因此请添加-Wall -Wextra
。
making the library include additional checks有预处理程序定义:
_GLIBCXX_CONCEPT_CHECKS
为某些模板先决条件添加额外的编译时检查。请注意,这些检查实际上并不总是按照应有的方式进行,因此不予批准。_GLIBCXX_DEBUG
。启用库调试模式。这有很大的运行时开销。_GLIBCXX_DEBUG_PEDANTIC
与上述相同,但会检查标准要求,而不是仅针对实施。答案 1 :(得分:4)
你想使用C++11标准(并且你想要那样),但是C ++ 11在w.r.t上取得了巨大的进步。它的旧版C ++ 98标准。
但旧版本的GCC(即GCC 4.8或更早版本)尚未在标准本身之前完成(因此他们接受了-std=c++0x
标志)。我强烈建议(如果你想要C ++ 11)使用最新版本的GCC,即GCC 4.9。修复GCC 4.9.2版本的错误出现在2014年10月底。请使用它,并传递std=c++11
标志,告诉编译器您希望C ++ 11符合。
我实际建议通过std=c++11 -Wall -Wextra -g
来获取C ++ 11,所有警告和调试信息。调试完程序后(使用gdb
,并且最好还使用最新版本的gdb
!),您可能会要求编译器优化-O2
(也许-mtune=native
如果您想为自己的计算机进行优化,那么
答案 2 :(得分:1)
供您参考:
的main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Test main CPP" << endl;
return 0;
}
build.sh
rm demoASI*
echo "**cleaned !!**"
##### C++ 11 Compliance #####
# type ONE
g++ -o demoASI_1 -std=c++0x main.cpp
echo "**rebuild-main-done (C++ 11 Compilation) !**"
# type TWO
g++ -o demoASI_2 -std=c++11 main.cpp
echo "**rebuild-main-done (C++ 11 Compilation) !**"
##### C++ 11+ Compliance #####
# type THREE
g++ -o demoASI_3 -std=c++1y main.cpp
echo "**rebuild-main-done (C++ 11+ (i.e. 1y, but not C++14) Compilation) !**"
###### C++ 14 Compliance ######
# type FOUR
g++ -o demoASI_4 -std=c++14 main.cpp
if [ $? -eq 0 ]
then
echo "**rebuild-main-done (C++ 14 Compilation) !** :: SUCCESS"
else
echo "**rebuild-main-done (C++ 14 Compilation) !** :: FAILED"
fi
现在,执行脚本为;
./build.sh
(假设build.sh具有执行权限)
您可以先检查g++
编译器的版本,如<; p>
g ++ --version
4.3之后的g ++版本支持c++11。
请参阅编译器中的c++14支持信息。