怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby clouds-hyhy » Mon Apr 19, 2021 3:31 am

如题,在编译(esp-idf:v3.3.4)时,想加入预处理器指令.
官方文档(v3.3.4)介绍中,使用CPPFLAGS好像能行,
官网资料.PNG
官网资料.PNG (29.07 KiB) Viewed 8292 times

在英文讨论区,发现类似的帖子,按照帖子中的做法尝试后报错。
英文讨论区.PNG
英文讨论区.PNG (46.77 KiB) Viewed 8292 times

请问编译时,添加预处理器指令的正确命令(格式?)是什么?
我的输入:
make -j8 CPPFLAGS+='MXEX_CFG_PLATFORMTYPE_STM32' all
ERROR:
xtensa-esp32-elf-gcc.exe: error: MXEX_CFG_PLATFORMTYPE_STM32: No such file or directory</r>

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby ESP_Gargamel » Mon Apr 19, 2021 8:16 am

你可以:

Code: Select all

export EXTRA_CPPFLAGS=-DMXEX_CFG_PLATFORMTYPE_STM32
然后正常 make

或者直接:

Code: Select all

make EXTRA_CPPFLAGS=-DMXEX_CFG_PLATFORMTYPE_STM32
你也可以在 make 后加上 V=1,把 make 的 log 打开,来确认生效了。

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby clouds-hyhy » Mon Apr 19, 2021 8:39 am

非常感谢你的回答。

我用
make CPPFLAGS+=-DMXEX_CFG_PLATFORMTYPE_STM32
编译成功了。
CPPFLAGS -D宏定义变量 才是正确格式。
一直都是用IDE来编译,对make这些编译相关的指令和参数完全不熟悉。 :(

追问一哈,EXTRA_CPPFLAGS 和 CPPFLAGS的区别是什么喃?
那个英文讨论区说的是EXTRA_CPPFLAGS 不会覆盖当前的设定,
CPPFLAGS+=难道不是继续追加的意思,也就不会覆盖当前设定,难道不一样?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby ESP_Gargamel » Mon Apr 19, 2021 10:09 am

你在 idf 里搜一下 EXTRA_CPPFLAGS,就大体清楚了,是这样的:

Code: Select all

CPPFLAGS := -DESP_PLATFORM -D IDF_VER=\"$(IDF_VER)\" -MMD -MP $(CPPFLAGS) $(EXTRA_CPPFLAGS)
make CPPFLAGS+=-DMXEX_CFG_PLATFORMTYPE_STM32 应该不行吧,会覆盖,建议使用 EXTRA_CPPFLAGS。或者也可以把 CPPFLAGS+=-DMXEX_CFG_PLATFORMTYPE_STM32 加到工程下的 Makefile 里,在 include $(IDF_PATH)/make/project.mk 之前。

zliudr
Posts: 360
Joined: Thu Oct 03, 2019 5:15 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby zliudr » Mon Apr 19, 2021 7:19 pm

建议OP还是升级IDF吧!我也曾经一直在用V3.3,用了一年半,但是终于还是升级了。你的项目要是才刚开始,应该用现在的新版本V4.3。否则等你项目做的差不多了,再升级源代码很头疼。不仅源代码需要升级,新的V4.x以及没有make支持了。只有cmake/ninja。什么都得重学一边。不如现在就开始。在cmake环境下我个人觉得对项目源代码的控制更精确。
可以用component_compile_definitions()和component_compile_options()在CMakeLists.txt里面分别植入宏定义和参数。

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby ESP_Gargamel » Tue Apr 20, 2021 11:51 am

@zliudr 的建议很好。
如果是产品级的开发,建议使用最新的稳定版本,可参看:https://docs.espressif.com/projects/esp ... rt-with。另外,IDF 版本有一个维护周期,关于版本支持策略,可参看:https://github.com/espressif/esp-idf/bl ... _POLICY.md
v3.3.x 会在 2022.2 月 EOL,v4.3 计划在 5 月初 release,可选择使用。

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby clouds-hyhy » Wed Apr 21, 2021 2:25 am

@ESP_Gargamel @zliudr
非常感谢你们的回答和建议。

现在主要做的是M5Core2的移植,最初构建环境时,我都是从GitHub下载的最新版,
在导入我们自己的项目前,在esp-idf下始终无法编译通过(缺少一些文件错误),网上搜索了一哈,
好像是说现在M5Core2的库文件只支持到idf的v3.3版本,checkout v3.3.4之后编译才通过的。

zliudr
Posts: 360
Joined: Thu Oct 03, 2019 5:15 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby zliudr » Wed Apr 21, 2021 3:44 am

你不提我都快忘了还有个M5。Seeed的Wio terminal就像是抄M5的 :)
我刚看了一下M5Core2的git,好像平均6-8个月没更新了。更新的文件也不是升级IDF的结果。你在git上开个issue,也许他们会至少告诉你他们有没有升级IDF的意向。我看了一下我的Arduino 1.8.13 ESP Arduino 1.0.5。是基于IDF 3.3版本的。也许更新的ESP Arduino 1.0.6会是基于IDF更新的版本?M5好像没有直接IDF支持,只有Arduino, MicroPython。你确定可以把Arduino代码导入IDF?好像可行但不容易。

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)

Postby clouds-hyhy » Wed Apr 21, 2021 7:36 am

@zliudr

我也是先用Arduino IDE(v1.8.13)写了几个M5Core2的demo,熟悉了哈M5的API和开发环境,
然后把我们的项目导入Arduino,但编译错误根本看不懂,问了Arduino Forum,也没有下文,
没有办法只有用esp-idf来尝试,我用的是官方提供的把交叉编译器安装好了的msys2环境。
因为第一次用idf环境,跟到官方文档和网上教程,git了esp-idf v3.3.4,M5Core2的最新, arduino-esp32的最新,
然后就可以了

arduino-esp32:
https://github.com/espressif/arduino-esp32

Who is online

Users browsing this forum: No registered users and 28 guests