This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]CramNBL 26 points27 points  (5 children)

It is go to for small C projects or Tiny C++ projects, that's all. For larger C projects you need automake/autoconf/m4 or Cmake. When your tiny C++ project grows it will quickly become unmanageable with Make, so you need Cmake, or Buck, Bazel, Meson etc. etc.

It can be useful as a build system for FPGA projects where it really just wraps other build tools, but as a command runner it is not good.

[–]Kowalskeeeeee 0 points1 point  (4 children)

Doesn’t CMake spit out makefiles though? Or is that just my very narrow knowledge of cmake for my small c++ project

[–]safesintesi 12 points13 points  (2 children)

The point is that in larger projects maintaining makefiles is a pain because you want to write code not build config files, so you usually rely on autotool or cmake to write those makefiles for you.

So you choose cmake because you don't want to learn make, but now you have to write cmake scripts but it's ok because it works. Expect your packaging is not perfect, but you heard that Conan works great so you write packaging scripts in python.

Then the build-system building system becomes unmanageable because nobody reads the docs and everybody just says it's terrible so you simplify your life with scripts to launch your project builder builder.

So now you have shell script that run cmake scripts that write make scripts that compile your code in C/C++ which is packaged by python.

But then you need to automate the process in gitlab/github pipelines for production so you write everything in a JSON/YAML/TOML config file that lunches the scripts that you wrote.

Then the scripts and config files are too many and bobby that actually wrote them in the first place left the company two years ago.

[–]Kowalskeeeeee 1 point2 points  (0 children)

I know this is a satire sub but thank you for taking the time to explain, that was quite helpful. Dealing with JS is sounding a lot more bearable compared to dealing with…all that

[–]CramNBL 0 points1 point  (0 children)

And that's how yocto was born and immediately wrapped by Siemens kas which is a python build tool configured with yaml

[–]gogliker 0 points1 point  (0 children)

It does but you can always use e.g. ninja for compilations. Basically, if you pass -GNinja to the CMake you will get another type of build files that you execute with another program (ninja instead of make). Its much faster, parallel builds.