- cross-posted to:
- hackernews@lemmy.smeargle.fans
- cross-posted to:
- hackernews@lemmy.smeargle.fans
I’ve been trying to learn a system language because it would enable me to access a whole new world of possibility for games, tools, and potential projects. My main problem when learning the language are:
- can I write modern C++ code using the newer standards and still compile with libraries from older standards?
- how do I even organize a C++ project? Look at the linked project, the
CMakeList.txt
is so hard to understand, the syntax looks so hard to write. - how do I install dependencies? You’re going to laugh at me, but I always used languages with package managers and I looked again at the linked project, and they write a whole
CMakeList.txt
to importImGui
(GUI library I wanna try) but if you compare the structure of the files, it’s different from the ones on the repository ofImGui
.
As you see there are a lot of problems and it pains me to not be able to solve them because Rust is so unfun to use and work with! Do you think I should try C++, carry one with it?
Thanks, hector.
Yes, but then your project ends up requiring that newer standard as minimum too (which can be fine if that’s what you want).
Well, one way that should be simple and scalable for beginners is leaving the root folder for project configuration/metadata/contribution guidelines/clang-format etc. and putting all source code inside
src/
.If it’s just an app, you can make smaller library targets in
src/
in separate folders with meaningful names, likesrc/models/
,src/settings/
etc. If it’s a library, you typically put headers you intend to expose to your users in asrc/include/
folder and usetarget_include_directories()
to point to it, otherwise the same principle as apps applies.It requires writing a few more, smaller CMakeLists, but it does mean you’re never lost in your own code.
We added this recently to KDE’s developer documentation, so at least for Linux it’s a start: Installing build dependencies: Using build errors to find missing dependencies.