[CMake] CMake still broken post-2.8.1

Brad King brad.king at kitware.com
Wed Jan 25 10:10:58 EST 2012


On 1/25/2012 9:06 AM, Phil Smith wrote:
> Just to be clear: that doesn't mean CMake is right -- it's not passing all
 > the arguments it should. How to move this forward?

IMO the change to CMake that exposed this was correct.  The ARG1
has always been a literal string placed in command shells after the
compiler command.  This is how it was treated everywhere except in
the compiler id detection, which uses execute_process instead of a
command shell to run the compiler.  That was a bug because it was
not running the compiler during identification in the same way that
it runs the compiler in the generated build system.  The change in
question fixed that bug by separating the arguments like they would
be in the generated command lines.  The only remaining possible fix
to that is to do a better job of separating the arguments like a
shell would by honoring quoted arguments with spaces, but that would
not make a difference in your case because there are no quotes inside
the argument value itself (only quotes in the CMake language syntax).

In your case, the code

   SET(CMAKE_C_COMPILER   "regina.exe" "cc.rex dcc.exe")

tells CMake to generate command lines in the build system like

   regina.exe cc.rex dcc.exe ...

because the second argument is placed literally on the command line.
Prior to the change in question CMake was doing this most of the time
but not during compiler identification.  Now it is fixed.

It's unfortunate that the bug fix to CMake exposed this bug in your
project, but that is something you'll have to fix in your project.
We've also provided other approaches elsewhere in this thread to
avoid the problem altogether by setting up your toolchain file to
skip compiler id detection.  I consider this matter closed.

-Brad


More information about the CMake mailing list