2020-04-28 07:57 PM
In STM32CubeIDE I created a C++ project. But the `main.c` is still generated with the .c extension and is compiled with the C compiler. That is why I cannot include the C++ headers to `main.c` (because the C compiler does not understand the keyword `class`). Thus I cannot create in `main.c` the global instances of the C++ classes.
I can tell the IDE to use the `g++` (C++) compiler for this file rather than `gcc` (C compiler). But among the language standard options still only the C options are available (e.g. "GNU11 (ISO C11 + gnu extensions) (-std=gnu11)"). The compiler will still compile the file as a C file rather than C++.
On the other hand I'm afraid to rename the `main.c` to `main.cpp` because it is regenerated during the code generation (after an update to .ioc file).
So how to make STM32CubeIDE to place the `main()` function to a C++ file, e.g. `main.cpp`, rather than to a C file like `main.c`?
---
My current idea is the following:
* tell IDE to exclude the `main.c` from compilation;
* copy `main.c` to `main.cpp`;
* include to `main.cpp` the C++ headers and create the instances of C++ classes, call their member functions from `main()` function;
* whenever the code is regenerated (and `main.c` is updated), copy the updates to `main.cpp`.
I hope there is a better approach than this. Please advise.
Solved! Go to Solution.
2020-04-28 08:15 PM
I found some answers here - https://community.st.com/s/global-search/main_cpp. But I don't know how to get the direct link to the answer I like most (ST forum developers may want to add this functionality). To see the answer I liked most search for `main_cpp`.
Thanks, resolved.
2020-04-28 08:09 PM
IMO, just renaming main.c to main.cpp is the best option. Presumably your hardware isn't changing frequently, so peripheral configurations aren't that likely to happen either. I don't use CubeMX to re-generate code often. Generally just once at the start of a project. And if something changes, doing a copy/paste of the relevant section change isn't too hard.
Until STM32CubeMX supports C++ a bit better, there is no perfect option. I think you've covered the best options you have available.
Renaming it as main.cpp allows the IDE to recognize it as C++ and it should be able to use the correct compiler and intellisense stuff.
2020-04-28 08:15 PM
I found some answers here - https://community.st.com/s/global-search/main_cpp. But I don't know how to get the direct link to the answer I like most (ST forum developers may want to add this functionality). To see the answer I liked most search for `main_cpp`.
Thanks, resolved.