cancel
Showing results for 
Search instead for 
Did you mean: 

What's the right way to work with C++ project?

Robin Kuzmin
Associate II

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.

1 ACCEPTED SOLUTION

Accepted Solutions
Robin Kuzmin
Associate II

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.

View solution in original post

2 REPLIES 2
TDK
Guru

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.

If you feel a post has answered your question, please click "Accept as Solution".
Robin Kuzmin
Associate II

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.