【问题标题】:Have the Arduino IDE set compiler warnings to error让 Arduino IDE 将编译器警告设置为错误
【发布时间】:2012-06-01 13:59:15
【问题描述】:

有没有办法将编译器警告设置为 Arduino IDE 中的错误?
或者任何通用的方式来设置 GCC 编译器选项?

我查看了 ~/.arduino/preferences.txt 文件,但没有发现任何表明微调控制的信息。我还查看了是否可以通过环境变量设置 GCC 选项,但我没有找到任何东西。

我不想让冗长的编译器输出(您可以使用 IDE 指定)过多地分散不必要的信息,我不想浪费时间阅读它。

我希望编译在出现警告时停止,以便清理代码。我的偏好是能够设置 -Werror= 选项,但通用的 -Werror 将适用于 .ino 项目的小代码大小。

附录:

根据所选答案中的建议,我实现了一个avr-g++ 脚本并将其放在普通avr-g++ 之前的路径中。为此,我将 Arduino 命令更改如下:

-export PATH="${APPDIR}/java/bin:${PATH}"
+export ORGPATH="${APPDIR}/java/bin:${PATH}"
+export PATH="${APPDIR}/extra:${ORGPATH}"

在 APPSDIR(Arduino 命令所在的位置)的新目录 extra 中,我有 avr-g++ 这是一个 Python 脚本:

#!/usr/bin/env python

import os
import sys
import subprocess

werr = '-Werror'
wall = '-Wall'

cmd = ['avr-g++'] + sys.argv[1:]
os.environ['PATH'] = os.environ['ORGPATH']
fname = sys.argv[-2][:]
if cmd[-2].startswith('/tmp'):
    #print fname, list(fname) # this looks strange
    for i, c in enumerate(cmd):
        if c == '-w':
            cmd[i] = wall
            break
    cmd.insert(1, werr)
subprocess.call(cmd)

因此,您将第一个命令替换为原始编译器名称,并重置用于不包含 extra 目录的环境。

fname 实际上很奇怪。如果你打印它,它只是abc.cpp,但它的长度要大得多,它实际上以/tmp开头。所以我检查它以决定是否添加/更新编译选项。

【问题讨论】:

    标签: compiler-construction arduino options


    【解决方案1】:

    看起来你在 Linux 上。 Arduino是一个脚本,所以你可以在脚本中设置PATH,将一个目录开头包含到一个包含程序的目录,avr-g++。那么 Java 的东西应该从那里获取编译器,不是吗?

    然后该程序使用额外的选项调用普通的 /usr/bin/avr-g++

    【讨论】:

    • 谢谢。这听起来像是一个主意。我希望 java 的东西没有硬编码的 avr-g++ 的搜索路径(我不会怀疑它是否有)。
    • 您实际上可以做到这一点。我发现默认设置是-w,恕我直言,这有点愚蠢,好像当您忽略它时问题就消失了。因此 -Werror 仅在将优先级设置为详细编译时才有效(否则 -w 会抑制它)。现在我需要实现一种方法来为库(GSM、SoftSerial)的 .ino 文件选择 -Werror 有很多我现在无法解决的错误。
    【解决方案2】:

    你有一个选择是从命令行编译你的草图。看看这个makefile

    【讨论】:

    • 谢谢我以前用过,但是(唯一?)使用 IDE 的好处是在上传之前会杀死调试串行监视器。也许我应该得到一个外部串行监视器并从 makefile 中杀死它。
    • Makefile 似乎与 IDE 的 1.0 版本不兼容了。
    猜你喜欢
    • 2022-07-16
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    相关资源
    最近更新 更多