6
Manjia
4y

I'm always wondering what was there in people minds when Cmake build system was invented.. I mean, I know drugs were super strong in the '80s, but this is ridiculous..

Comments
  • 0
    I'm wondering what is there in people's minds to prevent someone from making equally convoluted build systems.
  • 0
    @kescherRant Common sense I suppose XD
  • 2
    @kescherRant
    Gradle jumps through window,
    "Did some talk about me?".
  • 0
    huh? i thought "make" was your devs secret magic sauce in your toolset.
    Attended a meetup once where a guy was doing webdev magic with clojure and clojurescript and make. His pace of make spellcraft was marvelous.
  • 0
    Organic development over time? Once people started using it they could not change it as the interface is now the API used by thousands of developers?

    Its organic man... Totally and completely chill...
  • 2
    @Demolishun Yeah but I meant back then at that moment.. I mean, picture 2 guys talking in the 80's,
    one says to the other
    "imagine this build command: find_package, it will find and load settings from an external project, as long as someone else wrote a findMYPKG.cmake and it is listed under your machine's CMAKE_MODULE_PATH"

    the other one answers
    "Great idea! That's a very clean build pipeline"

    then I come out, and ask both of them
    "Hey guys! it seems your LSD is quite strong! may I ask you where can I buy some?"
  • 2
    @Manjia maybe if the path variable was:

    cMaKe_MoDuLe_PaTh
  • 1
    Sorry to bust the party, but cmake is actually pretty cool! At least for cross-platform developers like me.
  • 3
    @Manjia what's so bad about that design?
    It seems to be fairly straightforward to use.
    CMake definitely has issues (retarded syntax for eg., just like bash) but personally I don't feel that is one of them.
  • 0
    @RememberMe when people says "<that software> definitely has issues" in 2019 the only thing I think is "and despite this is that shit still around? WTF?!?"
  • 1
    @Manjia because economics.
    Practically once you have a decent CMake config going it doesn't need *that* much work.

    You have a finite amount of work that you can afford as per your project's budget. So you can either invest work into getting CMake to build your project, or into making a new build system *and* getting it to work with your project. Generally unless you're a huge project with constantly fluctuating and complex build requirements, it makes much more sense to do the former, because it's much less work. So nobody works on new build systems. And for backwards compatibility old warts are kept because fixing them has a cost not only for CMake but for every project using it, which may be more than the gains (so it makes zero sense to break it).

    Only huge projects like Chromium can afford to work on a custom build systems, and the one they came up with (Ninja) isn't really built to replace CMake but to be targeted by CMake.
  • 0
    @RememberMe I agree about the economic part but it is not true that nobody works on new build system, this is just true for the C/C++ ecosystem, there are plenty of build system in other ecosystems (too much of them imho) and most of them are directly handled by the IDE so good that the developer does not have to even care about which one he's using. My point is, there IS a way to do things differently, Android does that, Apple does that, Unity does that, Unreal Engine (in which you code using C++) does that; in 2019 a cmake workflow is just not acceptable, and to me it shouldn't have been considered acceptable in the late '2000s too
  • 2
    @Manjia wrong track!

    cmake is *not* a build system. It is a build system generator.

    You want Gnu make? Produce Makefiles.

    You want to build with Visual Studio? Generate a Project File.

    You want to feed Ninja? Generate a Ninja Config.

    The list what cmake can generate is long, and there is nothing out there that can do it. Nothing! (*)

    If you have a cross-platform project that actually needs to support different build systems, you either use cmake, or you drive yourself nuts with building and maintaining one system of your own for every platform.

    (*) meson is on a good track, and I hope it can replace cmake one day.
  • 1
    @Yamakuzure What I want is to be able to write my code and then to click a green play button on my IDE and to see my code being executed without event knowing which build system is being used or what a build system is at all. That is what basically happens with any language invented after the 1989
  • 0
    @Manjia yeah, that's what every IDE does. *shrug*

    If the project you are working on is configured with cmake, just generate something your IDE can work with. Done.
  • 1
    From
    https://en.m.wikipedia.org/wiki/...

    "CMake can generate project files for several prominent IDEs, such as Microsoft Visual Studio, Xcode, and Eclipse CDT. It can also produce build scripts for MSBuild or NMake on Windows; Unix Make on Unix-like platforms such as Linux, macOS, and Cygwin; and Ninja on both Windows and Unix-like platforms."
  • 1
    @Yamakuzure cmake projects can be opened in Qt Creator too. Just did this the other day. Really nice.
  • 0
    @Yamakuzure @Yamakuzure You are missing my point bro: cmake can sure do a lot of stuff, but my point is that nowadays every IDE is smart enough to resolve your class dependencies itself given the code alone, therefore there's no need of writing a cmake at all. The fact that basically every C++ dev still obstinates in writing complicated cmakes instead of relying on a modern IDE makes me very upset, expecially at the times I have to interpret it.
    It seems like preferring to go making wood in the forest instead of relying on the centralized warming when you feel cold.
  • 0
    @Yamakuzure Of course one can argue stating that "C++ is supposed to be compiled to different hardwares thus you cannot rely on just one IDE, it must be command-line compilabile", that is like saying "the cold can come everywhere! you definitely need wood instead of centralized warming".. well... NO, FOR GOD SAKE, this is just a bad and eradicated practice, First of all is not entierly true that the same IDE cannot handle different hardware builds, and second... come on, writing a 1000 lines text file to put together 100 classes makes no sense at all. You need to deploy your C++ on Android? fine, you open Android studio, click "import my project" and browse your source, you need to do that on IOS? cool, do the same with XCode.. Windows OS you say? I know lots of people uses Visual Studio but I'd personally recommend CLion, still "import my project" is the way... People who likes to write cmakes should write IDEs build systems instead, in my opinion
  • 1
    @Manjia no, I understood you perfectly. My point just was that *if* (and only if!) your project is cross-platform, then (and only then!) cmake can help you.

    You are right, if it's a one-platform-project, cmake is unnecessary. 😉
Add Comment