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

Arduino 1.0.6: How to change compiler flag?

我目前正在使用 Arduino 1.0.6 IDE 开发一个项目,它似乎不接受 C++ 11 std::array。是否可以更改编译器标志以使其工作?

使用 IDE 很难做到这一点。

我建议您使用 Sudar's great Arduino Makefile.

完整命令行

这样您就可以根据自己的喜好自定义编译器标志。

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

如果您发现缺少某些内容,请随时在 Github 上填写问题,以便我可以修复它:)

希望对您有所帮助! :)

是的,但不是在 1.0.6 中,而是在 1.5 中? .\Arduino\hardware\arduino\avr\platform.txt 指定用于编译的命令行。

可以直接修改此文件或将其复制到您的用户 .\arduino\hardware... 目录以创建自定义平台。为了不改变股票 IDE。这也将存在于 other/updated IDE 中,您可以 运行。您可以只复制平台文件和 boards.txt。并让您的 boards.txt 文件 link 成为核心:库,以免一次性使用。参见

参考:Change CPU speed, Mod New board

将自定义编译器标志添加到 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 /) 并使用特定于项目的编译器标志继续处理您的项目。

很明显,如果你有多个项目并且不介意处理Makefile,那么按照ladislas的建议使用Makefile更专业也更方便。但是,使用 platform.local.txt 总比直接弄乱 platform.txt 好,而且对于已经熟悉 Arduino IDE.

的人来说,这是一种使用编译器标志的简单方法

我想添加 -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++

script 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不知道这样的方案能不能搞定

您可以在 *.ino 文件中使用 #pragma,这样就不必创建本地平台文件:

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

其他的,见HERE