作为 的 版本1.6.6 强> ,Arduino IDE默认启用c ++ 11。
对于旧版本,请继续阅读:
的 更改标志非常容易 强> 对于工具链的任何元素, 的 包括汇编程序,编译器 强> ,链接器或归档器。
在Arduino IDE 1.5.7版(2014年7月发布)上测试过,
例如,
的 启用对C ++ 11的支持(C ++ 0x) 强> 在Arduino IDE 1.5.7和1.5.8版本上进行测试,您只需在以compile.cpp.flags =“开头的行尾添加标记”-std = gnu ++ 11“。
预计默认情况下启用C ++ 11 在不远的将来 在Arduino IDE上。但是,从版本1。5。8(2014年10月)开始,情况仍然如此。
Arduino IDE 1.6.6及更新版本默认启用C ++ 11(它们在platform.txt文件中设置了编译器标志“-std = gnu ++ 11”)。
首先,仅限 gcc 4.7及以上(因此 avr-gcc 4.7及以上)支持 C++11 。因此,请检查安装的版本:
gcc
avr-gcc
C++11
gcc --version avr-gcc --version
如果 avr-gcc 是4.7或更高,那么你可以使用 C++11 。
Arduino IDE不支持自定义编译器标志。这一直是 要求 但尚未实施。
因此,您不得不使用其他环境或直接从命令行编译程序。
如果是直接从命令行编译使用 avr-gcc ,您只需添加一个额外的编译器标志即可启用C ++ 11支持。
-std=c++11
具体而言 开发环境 ,大多数人都支持从IDE中的构建选项编辑编译器标志。需要将上述标志添加到每个环境的标志列表中。
C++0x 是工作草案的名称 C++11 标准。 C++0x 支持是可用的 gcc 4.3以后。但是,这是严格的实验支持,所以你无法想象 C++11 存在的功能。 这里 是相应版本的完整功能列表 gcc 。功能的可用性 avr-gcc 将与相应的可用内容相同 gcc 版。
C++0x
编译器标志为 C++0x 是:
-std=c++0x
我用 伊诺 这工作:
ino build -cppflags="-std=c++0x"
这生成了一个至少15k大小的hex文件(开启了优化),而标准版本大约为5k,这是一个可怜的小Atmega328的考虑因素。对于一个具有更多程序空间的微控制器,可能没问题。
请注意,没有简单的方法可以从Arduino IDE指定其他标志或使用其他IDE(Eclipse,代码块等)或命令行。
作为一个hack,你可以使用一个小代理程序(应该是跨平台的):
//============================================================================ // Name : gcc-proxy.cpp // Copyright : Use as you want // Description : Based on http://stackoverflow.com/questions/5846934/how-to-pass-a-vector-to-execvp //============================================================================ #include <unistd.h> #include <iostream> #include <vector> #include <fstream> using namespace std; int main(int argc, char *argv[]) { vector<string> arguments; vector<const char*> aptrs; // Additional options, one per line ifstream cfg((string(argv[0]) + ".ini").c_str()); if (cfg.bad()) cerr << "Could not open ini file (you're using proxy for some reason, er?)" << endl; string arg; while (cfg) { getline(cfg, arg); if(arg == "\r" || arg == "\n") continue; arguments.push_back(arg); } for (const string& arg : arguments) aptrs.push_back(arg.c_str()); for (int i = 1; i < argc; ++i) aptrs.push_back(argv[i]); // Add null pointer at the end, execvp expects NULL as last element aptrs.push_back(nullptr); // pass the vector's internal array to execvp const char **command = &aptrs[0]; return execvp(command[0], command); }
你完成了!
示例avr-g ++。ini:
D:\Arduino\hardware\tools\avr\bin\avr-g++.orig.exe -std=c++0x
希望,这有帮助!