我使用这个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++ options并发现选项-Wimplicit-function-declaration启用它。此外,它还通过-Wall选项启用,该选项在make文件中使用。
我想启用-Wall选项(因为它启用了许多其他警告)但仅禁用-Wimplicit-function-declaration选项。
我检查了文档,但无法弄清楚如何执行此操作。有人可以告诉我该怎么做吗?
答案 0 :(得分:7)
编译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++
答案 1 :(得分: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项目中构建此预处理。