2

我正在使用这个Makefile来编译我的 Arduino 草图,它具有以下 CPP 和 C 标志

CPPFLAGS      += -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) \
            -I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \
            $(SYS_INCLUDES) $(USER_INCLUDES) -g -Os -w -Wall \
            -ffunction-sections -fdata-sections
CFLAGS        = -std=gnu99
CXXFLAGS      = -fno-exceptions

当我编译一个 cpp 文件时,如果在声明函数之前使用了这些函数,我会收到一个致命错误。我浏览了avr g++ 选项,发现选项 -Wimplicit-function-declaration 启用了它。它也由 make 文件中使用的 -Wall 选项启用。

我想启用 -Wall 选项(因为它启用了许多其他警告)但仅禁用 -Wimplicit-function-declaration 选项。

我检查了文档,但无法弄清楚如何做到这一点。有人可以告诉我该怎么做吗?

4

2 回答 2

8

编译 C++ 代码时不能禁用该错误 - 这是一个致命错误,而不是警告。

对于 C 代码(使用 ),您可以(但不应该)摆脱它-Wno-implicit-function-declaration,但这不适用于 C++。

cc1plus: warning: command line option "-Wno-implicit-function-declaration" 
                  is valid for C/ObjC but not for C++
于 2012-08-05T12:07:00.807 回答
0

参考; http://arduino.cc/en/Main/FAQ#.UyUa8vmSz99

引用

事实上,你已经是;Arduino 语言只是一组可以从您的代码中调用的 C/C++ 函数。您的草图进行了微小的更改(例如自动生成函数原型),然后直接传递给 C/C++ 编译器 (avr-g++)

更多信息; http://arduino.cc/en/Hacking/BuildProcess#.UyUa6vmSz98

windows arduino IDE将在将函数声明原型传递给编译器之前对其进行预处理。

如果您想复制 arduino IDE,则需要将此预处理构建到您的 arduino makefile 项目中。

于 2014-03-16T03:45:57.603 回答