On 2012/12/07 10:37 AM, Jos Decoster wrote:
I'd really like to convince you that CMake should replace NMake for
Windows only (thus not 'another').
A cross-platform cmake build by comparison would be 'another' build
method to maintain, because I can't see everyone agreeing to drop
I've looked at the work that Clifford Yapp has done on a
cross-platform CMake build
and it's really good, but it tries to shoehorn the Windows build
into a Unix model, and in doing so it reproduces a bunch of the
complexity and problems of the current (autoconf + NMake) approach.
The build - and particularly the install - needs of Windows are
different from *nix. You _can_ support both in one build system,
but when you do you end up complicating the *nix build and getting
an un-Windowsy result on Windows. You also end up with frequent
breaks of the Windows build when developers on a *nix platform make
non-trivial updates to the build files (and that's a problem in Tcl
where there are relatively few developers building on Windows).
The main reason why I started work on a CMake build was to be able
to build Tcl extensions. Tcl went through about a four-year period
of chronic build failures on Windows (from 2007 to 2011 I could not
once check out HEAD/trunk from Tcl, Tk, Itcl, Thread and get a
successful build+install using NMake), and many other extensions had
woefully out of date NMake support (or none at all). I'm no
stranger to NMake, but getting an extension building and installing
with it is not a task for the faint of heart. Even maintaining an
NMake build over time is tricky.
I wanted something that I could easily use to get extensions
building, and that would be easy for a non-Windows developer to set
up (with a high chance of success). That is why Coffee (my CMake
builds) focuses on _really simply_ CMakefiles and targets Windows
only. The CMakefile feels more like a config.in than a
Makefile.in. You can't achieve that level of simplicity in a
TL;DR: replace NMake with CMake, then we have the same number of
supported build methods, but the build is easier to maintain on
Windows and supports more compliers.