如何将STM32CubeMX生成的Atollic Eclipse C项目转换为C++(3个步骤):
将main.c复制到main.cpp并从构建中“排除”main.c。结果:还不太行。虽然main.cpp可能出现在Eclipse项目文件列表中,但它甚至无法开始编译(无法捕获明显的语法错误),而且缺少main()的链接器错误。
接下来,在.project文件中使用文本编辑器添加org.eclipse.cdt.core.ccnature,如下所示...
```
org.eclipse.cdt.core.cnature
org.eclipse.cdt.core.ccnature
```
参见
http://www.openstm32.org/forumthread1244。这可以在打开项目的情况下在Eclipse运行时完成。结果:main.cpp可以编译,但找不到包含文件,因为包含路径是错误的。你会认为cppnature会是一个更好的名称。
编辑:搜索Eclipse帮助以获取有关如何使用菜单File / New / Other / Convert to C/C++ Make Project添加C++ nature的提示。
接下来,修改项目设置以将相关的C设置复制到C++设置中-如图所示。
![enter image description here](https://istack.dev59.com/kYHZ3.webp)
该项目需要关闭并重新打开才能使此更改生效。结果:构建、链接、运行和正确运行。main.cpp可以调用HAL c代码,并且HAL回调可以调用.cpp文件中的函数。如果
1.cpp侧正在调用.c侧的函数(通过在函数原型前添加defined extern "C"
2),则可能需要在.cpp文件中使用extern "C"修饰符。.c侧正在调用在.cpp中定义的回调(通过在.cpp侧的函数定义前添加defined extern "C"来修改函数定义)。
一些注释:
- 如果我使用CubeMX重新生成代码(例如更改时钟或引脚配置),main.c将会被更新,但main.cpp不会被更新,因此需要将.c文件的更改/差异合并到.cpp文件中。
- 如何确保C和C++设置是等效的:构建后,在控制台窗口查看gcc和g++的命令行调用,并确保相关参数(路径,-D等)完全相同。
- 可以(但风险很大)编辑Eclipse .cproject XML文件,并将C设置复制到C ++端(具体细节在此省略 - 但在编辑.cproject文件之前,请关闭Eclipse中的项目)。
- 关于对CubeMX / HAL“膨胀”的反对意见:CubeMX非常快地生成代码和项目。如果HAL API很慢 - 例如GPIO端口引脚访问 - 然后只需用包含该膨胀API简单子集的新用户函数替换API调用。我经常在时间关键的代码中这样做。
- 我正在使用CubeMX(4.14.0)和Atollic(v6.0.0 Lite)。虽然我在其他Eclipse环境中看到了转换为C ++的项目选项,例如Xilinx Eclipse,但我没有在Atollic Eclipse中看到该选项。
改进空间:可能有一个可以编辑的CubeMX模板,使这些更改自动化,但我对CubeMX模板了解不够,不能使这种黑客更加优美。
我也使用CubeMX和IAR EWARM,并且经过类似(但稍微简单一些)的过程将其转换为.cpp项目。