Arduino 1.0.6: 如何更改编译器标志?

9

我正在使用Arduino 1.0.6 IDE进行项目开发,但似乎无法接受C++11中的std::array。有没有可能更改编译器标志以使其工作?

5个回答

10

在 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不会覆盖标准文件且非常简短,所以非常容易尝试编译器标志。
您可以将platform.local.txt保存到每个项目的目录中。它不会对项目的目录产生任何影响,但是如果您决定再次处理旧项目,则可以将其复制到与platform.txt相同的目录(通常为./hardware/arduino/avr/),并继续使用特定于项目的编译器标志在项目上工作。
显然,像ladislas建议的那样使用Makefile更专业、更方便,如果您有多个项目并且不介意处理Makefile,则更好。但是,使用platform.local.txt比直接处理platform.txt要好,并且对于已经熟悉Arduino IDE的人来说,这是一个轻松玩转编译器标志的方法。

非常有用的答案!谢谢。对于Windows ArduinoIDE,路径大概是:.../Users/XXXX/Documents/Arduino/hardware/espressif/esp32/ - not2qubit
这个能在VS-Core工作吗?还是只能在Arduino IDE上运行? - Mohammed Noureldin

8

您可以在*.ino文件中使用#pragma,以免必须创建本地平台文件:

#pragma GCC diagnostic warning "-fpermissive"
#pragma GCC diagnostic ignored "-Wwrite-strings"

其他的指令请参见此处


当你想要避免警告时,这绝对是最好的答案。不需要去处理库或git存储库中的任何内容。有关其他方法的长列表,请参见此答案 - not2qubit
警告:'-fpermissive'不是控制警告的选项[-Wpragmas] 1 | #pragma GCC diagnostic warning "-fpermissive" - 78dtat78da

7

使用IDE非常困难。

我建议您使用Sudar's great Arduino Makefile进行完全命令行操作。

这样,您就可以自定义编译器标志。

我还创建了Bare Arduino Project来帮助您入门。文档涵盖了很多方面,从安装最新的avr-gcc工具链到如何使用存储库、编译和上传代码。

如果您发现有遗漏的地方,请随时在Github上提交问题,以便我修复它:)

希望这有所帮助!:)


5
是的,但不在1.0.6版本中,在1.5.?版本中,.\Arduino\hardware\arduino\avr\platform.txt指定了编译所使用的命令行。
可以直接修改此文件,或将其复制到您的用户.\arduino\hardware\...目录以创建自定义平台,以免改变原始IDE。这样也可以在其他/更新的IDE中运行。您可以只复制平台文件和boards.txt文件,并使您的boards.txt文件链接到核心库,以免产生一次性问题。请参阅
参考:更改CPU速度修改新板

0

我想添加-fpermissive标志。 在Linux下,这是我成功完成的操作:

思路是用两个bash脚本替换两个编译器avr-gccavr-g++,并在其中添加您的标志(对我来说是-fpermissive

以root权限执行以下操作:

  • 将编译器avr-gcc(位于/usr/bin中)重命名为avr-gcc-real
  • 将编译器avr-g++(位于/usr/bin中)重命名为avr-gcc-g++-real

现在,在/usr/bin/下创建两个bash脚本avr-gccavr-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++

在Windows下,我不知道是否可以实现这样的解决方案。

显然,你可以在Windows上进行脚本编程。它可以做任何Linux能做的事情。 - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接