如何在esp-idf和cmake中禁止开关警告

3
我有一个项目最初是为Particle设备编写的,现在我们要从Particle设备转移到ESP32。我一直在努力将其中一个设备的代码移植到esp-idf上,但现在收到了许多与switch语句不包含默认值有关的警告,因此无法编译。由于某种原因,Particle设备使用的编译器并不关心这个问题。虽然我可以逐个修正代码,但现在不是这么做的时间或地点,我需要抑制这些警告。最终,我们将在原始代码中进行修正,并推送到该分支。
../main/Services/ConfigurationParser.cpp:295:16: error: enumeration value 'psAmbientTemperature' not handled in switch [-Werror=switch]

我不太了解这个平台或编译器,不知道如何将这些信息推迟到以后再处理。在其他地方也找不到相关的信息。非常感谢您的帮助。

1个回答

5
ESP IDF构建系统默认启用GCC选项-Werror。这将导致GCC将所有警告视为错误。您需要告诉CMake反转该操作,这需要向GCC添加命令行选项
假设您的带有警告的代码完全包含在名为“main”的组件中(这是默认值),只需编辑文件main/CMakeLists.txt并在文件底部添加以下行以仅抑制特定警告:
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-error=switch)

或者使用此选项来停止将所有警告视为错误:

target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-error)

当我在main/CMakeLists.txt文件中使用这两个命令时,我会遇到一个CMake错误:target_compile_options命令不可编写。 - Ricky
错误信息 "target_compile_options 命令不可脚本化" 是因为该行需要放在 idf_component_register 条目下面。感谢您的回答! - Ricky
1
很高兴听到这个消息,愉快地编程吧! - Tarmo
当编译器抱怨“本地定义但未使用[-Werror=unused-local-typedefs]”时(例如,包含ets_sys.h时),使用... PRIVATE -Wno-unused-local-typedefs ...也可以解决这个问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接