我正在使用Arduino 1.0.6 IDE进行项目开发,但似乎无法接受C++11中的std::array
。有没有可能更改编译器标志以使其工作?
我正在使用Arduino 1.0.6 IDE进行项目开发,但似乎无法接受C++11中的std::array
。有没有可能更改编译器标志以使其工作?
在 platform.local.txt 中添加自定义编译器标志。它只需创建在 platform.txt 所在的同一目录中即可。例如:
compiler.c.extra_flags=
compiler.c.elf.extra_flags=
compiler.S.extra_flags=
compiler.cpp.extra_flags=-mcall-prologues -fno-split-wide-types -finline-limit=3 -ffast-math
compiler.ar.extra_flags=
compiler.objcopy.eep.extra_flags=
compiler.elf2hex.extra_flags=
在这个例子中,C++标志将使大型草图变得更小。当然,您可以使用自己的标志。由于platform.local.txt不会覆盖标准文件且非常简短,所以非常容易尝试编译器标志。您可以在*.ino
文件中使用#pragma
,以免必须创建本地平台文件:
#pragma GCC diagnostic warning "-fpermissive"
#pragma GCC diagnostic ignored "-Wwrite-strings"
其他的指令请参见此处。
使用IDE非常困难。
我建议您使用Sudar's great Arduino Makefile进行完全命令行操作。
这样,您就可以自定义编译器标志。
我还创建了Bare Arduino Project来帮助您入门。文档涵盖了很多方面,从安装最新的avr-gcc
工具链到如何使用存储库、编译和上传代码。
如果您发现有遗漏的地方,请随时在Github上提交问题,以便我修复它:)
希望这有所帮助!:)
我想添加-fpermissive
标志。
在Linux下,这是我成功完成的操作:
思路是用两个bash脚本替换两个编译器avr-gcc
和avr-g++
,并在其中添加您的标志(对我来说是-fpermissive
)
以root权限执行以下操作:
avr-gcc
(位于/usr/bin中)重命名为avr-gcc-real
avr-g++
(位于/usr/bin中)重命名为avr-gcc-g++-real
现在,在/usr/bin/
下创建两个bash脚本avr-gcc
和avr-g++
脚本avr-gcc
包含以下行:
avr-gcc-real -fpermissive $@
脚本avr-g++
包含以下行:
avr-g++-real -fpermissive $@
正如您所知,$@
表示传递给脚本的所有参数。因此,IDE传递给编译器的所有参数都将替换您的bash脚本(这些脚本使用您的标志和IDE标志调用真正的编译器)。
不要忘记为您的脚本添加可执行属性:
chmod a+x avr-gcc
chmod a+x avr-g++
.../Users/XXXX/Documents/Arduino/hardware/espressif/esp32/
。 - not2qubit