|
Boost : |
From: Edward Diener (eldiener_at_[hidden])
Date: 2021-05-31 12:13:13
On 5/31/2021 3:24 AM, Alexander Grund via Boost wrote:
>
>> OK, I will bite <g>.
>>
>> // Beginning of rant
>>
>> The difficulty of specifying a compiler to use with CMake, compared
>> with the elegance of b2's toolset definitions, makes me really wonder
>> why the majority of the C++ world considers CMake anything but
>> software gone terribly wrong. I know b2 has some abstruse weaknesses,
>> but specifying a toolset/definition is not one of them. Maybe I have
>> missed something but I certainly do not see how some CMake generator
>> equates to a particular compiler other than the Visual C++ generators,
>> where each generator name equates to a particular version of VC++.
>> There must be more I am missing but there is not anything in the CMake
>> documentation I can find which explains to me how I can specify, for
>> instance, a particular version of mingw-w64 gcc or clang on Windows
>> for CMake to use. The explanation for the CMake generators at
>> https://cmake.org/cmake/help/v3.20/manual/cmake-generators.7.html#manual:cmake-generators(7)
>> is so pathetic that if I did not know the majority of C++ programmers
>> swear by CMake I would really have thought that such software
>> documentation would have doomed such software for popular use eons ago.
>>
>> // End of rant
>
> I'll bite back ;-)
>
> CMake has 2 levels of things you specify because CMake is not a build
> system (as B2, make, ninja, ...) but a buildsystem generator.
> In short:
>
> - With "-G" you choose the build system to generate files for, e.g. VS
> Solutions, Makefiles, Ninja configs, ...
> - With CMAKE_<lang>_COMPILER you choose the compiler to use, e.g. `cmake
> -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_C_COMPILER=gcc-10 ...`
>
> The defaults if unset are chosen reasonably. E.g. for make/ninja (make
> is the default) it chooses $CC/$CXX (and maybe some fallbacks such es
> `cc`) and for the VS generators it chooses the VS compiler for that
> version.
>
> What do you gain from this? By switching the generator (and nothing
> else) you can develop your project in whatever you want. E.g. VS,
> VScode, vim (with a language server), ...
> I find that quite powerful, especially if you need to develop on
> Windows. So for that CMake is better than B2.
>
> However I agree that for building/testing alone B2 is clearly superior.
>
> So yeah, CMake is a tool, it has strengths and weaknesses and has some
> historic backage due to the need to be backwards compatible (just as C++
> has...)
My beef is that the CMake documentation does not tell you what compilers
a particular generator supports, except for the Visual Studio
generators. Period. It is not the process but the lack of documentation.
The lack of documentation is noticeable because I think the average
programmer will first ask: What compiler can I use to do X, Y, and Z,
and how do I specify commands to that compiler. That seems perfectly
natural to me and the fact that one uses -DCMAKE_CXX_COMPILER with the
path to the compiler and options separated by semicolons, is lost amidst
the welter of basic explanations about generators.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk