Page 1 of 1
怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Mon Apr 19, 2021 3:31 am
by clouds-hyhy
如题,在编译(esp-idf:v3.3.4)时,想加入预处理器指令.
官方文档(v3.3.4)介绍中,使用CPPFLAGS好像能行,
- 官网资料.PNG (29.07 KiB) Viewed 8284 times
在英文讨论区,发现类似的帖子,按照帖子中的做法尝试后报错。
- 英文讨论区.PNG (46.77 KiB) Viewed 8284 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>
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Mon Apr 19, 2021 8:16 am
by ESP_Gargamel
你可以:
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 打开,来确认生效了。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Mon Apr 19, 2021 8:39 am
by clouds-hyhy
非常感谢你的回答。
我用
make CPPFLAGS+=-DMXEX_CFG_PLATFORMTYPE_STM32
编译成功了。
CPPFLAGS -D宏定义变量 才是正确格式。
一直都是用IDE来编译,对make这些编译相关的指令和参数完全不熟悉。
追问一哈,EXTRA_CPPFLAGS 和 CPPFLAGS的区别是什么喃?
那个英文讨论区说的是EXTRA_CPPFLAGS 不会覆盖当前的设定,
CPPFLAGS+=难道不是继续追加的意思,也就不会覆盖当前设定,难道不一样?
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Mon Apr 19, 2021 10:09 am
by ESP_Gargamel
你在 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 之前。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Mon Apr 19, 2021 7:19 pm
by zliudr
建议OP还是升级IDF吧!我也曾经一直在用V3.3,用了一年半,但是终于还是升级了。你的项目要是才刚开始,应该用现在的新版本V4.3。否则等你项目做的差不多了,再升级源代码很头疼。不仅源代码需要升级,新的V4.x以及没有make支持了。只有cmake/ninja。什么都得重学一边。不如现在就开始。在cmake环境下我个人觉得对项目源代码的控制更精确。
可以用component_compile_definitions()和component_compile_options()在CMakeLists.txt里面分别植入宏定义和参数。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Tue Apr 20, 2021 11:51 am
by ESP_Gargamel
@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,可选择使用。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Wed Apr 21, 2021 2:25 am
by clouds-hyhy
@ESP_Gargamel @zliudr
非常感谢你们的回答和建议。
现在主要做的是M5Core2的移植,最初构建环境时,我都是从GitHub下载的最新版,
在导入我们自己的项目前,在esp-idf下始终无法编译通过(缺少一些文件错误),网上搜索了一哈,
好像是说现在M5Core2的库文件只支持到idf的v3.3版本,checkout v3.3.4之后编译才通过的。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Wed Apr 21, 2021 3:44 am
by zliudr
你不提我都快忘了还有个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?好像可行但不容易。
Re: 怎样在esp-idf编译环境中添加预处器理指令(preprocessor)
Posted: Wed Apr 21, 2021 7:36 am
by clouds-hyhy
@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