[CMake] Is CMake powerful enough?

Brandon Van Every bvanevery at gmail.com
Fri Jun 8 00:15:30 EDT 2007


On 6/7/07, Alexander Neundorf <a.neundorf-work at gmx.net> wrote:
> On Thursday 07 June 2007 15:45, Oliver Kullmann wrote:
>
> > Finally, it somehow seems to us that the conception of cmake is not really
> > that of a powerful extension of make, but more of a convenient
> > "user-interface", with the typical trade-off: What the user-interface does,
> > it does convenient and well, but what it not does is very hard to
> > integrate?
>
> CMake is not an extension to make, it is a cross-platform build-file generator
> (Makefiles, MSVC, XCode, KDevelop projects).
> It is powerful enough to build sophisticated projects like KDE4, so I doubt
> there is much it can't do.

KDE4, although big, is likely just as mundane as every other average
piece of software out there.  You're the expert on it; what's
particularly dynamic about it?  Is it anything more than a big static
build tree with some dynamically generated parts?  Oliver sounds like
he wants "crazy" dynamic everything with all sorts of elegant CS
interfaces and research possibilities etc.  This isn't CMake.  CMake
is a pragmatic tool that generates native cross-platform build files
for many compiler and operating system targets.  It is geared towards
the build processes that most people use.  It is not a build systems
research tool, and that sounds like what Oliver actually wants.

Or at least he thinks he wants.  CMake has many users, and it has
proven itself in the real world.  No research tool has.  So I think
Oliver and his group need to think about whether they're looking for
the ultimate in research abstractions, or whether they want to go with
what most have found to be actually useful for typical software.

CMake is like GNU Autoconf.  CMake is better, faster, more integrated,
and is truly cross-platform, i.e. it supports all the versions of MS
Visual Studio, and Autoconf never will.  A lot of people move to CMake
because Autoconf is so painful to work with, and because they need the
cross-platform MSVC support.  But from a design standpoint, how you
actually write your build system, the mentality is the same.  There's
less to remember, because it's a more integrated and less tweaky
design, but it's essentially the same drill.

Some people think that a fully featured, elegant, abstract, powerful
programming is necessary for a build system.  They might be attracted
to SCons, for instance, because it is based on Python.  Around here,
however, most people realize that you don't actually need a fancy
language, you need a build system that accomplishes what you actually
need to accomplish.  Compilers and linkers are ugly, and CMake
abstracts a lot of it away.  It's worth noting that the KDE crowd
dumped SCons in favor of CMake.  Apparently, the fancy programming
language was not that helpful.

But your needs might be truly in the realm of research.  If so,
chasing down research papers and projects is your best option.
Myself, I've gotten very irritated when looking at functional
programming languages, only to see build systems based on untyped
shells using incredibly error prone system tools.  I think the SML/NJ
guys got sick of it and did something about it, they made some kind of
build tool, but I've never checked it out.


Cheers,
Brandon Van Every


More information about the CMake mailing list