【问题标题】:Getting Arduino IDE to compile for C++14让 Arduino IDE 为 C++14 编译
【发布时间】:2022-07-16 19:00:24
【问题描述】:

我一直在寻找修改 Arduino IDE 1.x 甚至 Arduino CLI(我没有使用但愿意采用)下的构建标志,以便我可以取消定义 -std=gnu++11而是定义 -std=gnu++14

我发现了一个与此相关的问题,它几乎可以满足我的需求:

Arduino 1.0.6: How to change compiler flag?

但它只显示了如何添加标志,而不是删除它们。我发现了另一篇关于将 arduino 更改为 GNU C++17 的相关帖子,但答案是不可能。

在这种情况下,我知道这是可能的,因为我在 Platform IO 中这样做是为了使用 htcw_gfx 库。它适用于大多数可以合理运行 GFX 的平台。

但我只是不知道如何摆弄 Arduino 让它按照我需要的方式跳舞。

任何帮助将不胜感激。

【问题讨论】:

  • 您没有说您使用的是哪个版本的 Arduino IDE。我假设是最新的 1.x,因为您追逐了 1.x 的链接
  • 谢谢!我编辑了。我完全忘记了有一个新版本的 IDE。老实说,我使用的是 platformIO,但我编写了 lib,其中一些需要 C++14,所以我试图弄清楚这一点,以便我可以帮助人们使用我从 Arduino IDE 编写的内容,而不仅仅是 PIO
  • 是的,我认为在 arduino-cli 工具的内部某处,有一个对带有选项的编译器的实际调用。您可能可以在该级别对其进行修改。但据我所知,开箱即用的 Arduino 开发工具具有相当的限制性,它维护了一个非常受控的开发环境,这对于主要涉足 C/C++ 编程的爱好者来说很方便。

标签: c++ c++11 gcc c++14 arduino-ide


【解决方案1】:

您可以修改hardware/arduino/avr/platform.txt 文件中的默认编译标志。

$ grep -n "std" hardware/arduino/avr/platform.txt
23:compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
28:compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto

对于某些 linux 系统,以下内容可以自动执行此操作:

dirname $(realpath $(which arduino)) | xargs -I{} sed -i "s/\(std=gnu++1\)1/\14/" {}/hardware/arduino/avr/platform.txt

但这不是很便携,如果用户已经安装了带有 Snap 的 Arduino(因为 snap 已经安装了这些文件 RO)

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多