CMake questions (add_definition, CMP0063)

Frederik Schwarzer schwarzer at kde.org
Wed Oct 14 21:07:29 UTC 2015


Am Mittwoch, 14. Oktober 2015, 11:02:31 schrieb Alex Merry:
> On 2015-10-05 14:30, Frederik Schwarzer wrote:
> > Am Samstag, 3. Oktober 2015, 00:30:04 schrieben Sie:
> >> On Fri, Oct 2, 2015 at 11:09 PM, Frederik Schwarzer
> > 
> > <schwarzer at kde.org> wrote:
> >> > while looking through some make files, I found two things that
> >> > I
> >> > do
> >> > not understand.
> >> > 
> >> > 1)  add_definitions("-Dx -Dy") vs. add_definitions(-Dx -Dy)
> >> > Is there a difference? Laurent added the quoted version in
> >> > KShisen
> >> > but "in the wild" I can only find the non-quoted version.
> >> 
> >> Well, not that I know of. If anything I would suggest /not/ using
> >> the quotes, without knowing Laurent's reasoning. Maybe you can
> >> ask
> >> him and enlighten us?
> > 
> > Unfortunately he wasn't as talkative as I had hoped. :)
> > He said that he does not understand my problem since both versions
> > worked. Well, he is right but my curiosity was not satisfied that
> > day.> 
> > :)
> 
> There is a difference, and the second form is the correct one
> (although it makes very little practical difference, at least on
> most UNIX systems).
> 
> In CMake's internal language, the quoting works pretty much like on
> the command line -- with add_definitions("-Dx -Dy"),
> add_definitions is being passed a single argument "-Dx -Dy", and in
> add_definitions(-Dx -Dy) it is being passed two arguments, "-Dx"
> and "-Dy". You could equivalently write add_definitions("-Dx"
> "-Dy").
> 
> The difference is that when add_definitions receives "-Dx" as a
> single argument, it recognises it as a definition declaration and
> munges it if necessary. In particular, with MSVC it will produce
> "/Dx" (it also attempts some escaping magic if necessary, as with
> "-DFOO=\"some string\""). It also gets stored internally as a
> "definition" argument for the compiler.
> 
> When it receives "-Dx -Dy", it doesn't recognise it as a definition
> declaration, and assumes you want to dump it wholesale on the
> compiler command line. It gets stored internally as a compiler
> "flag", and doesn't get munged.
> 
> You may wonder why "-Dx -Dy" works at all -- why doesn't this get
> passed as a single argument to the compiler, and then get rejected
> for not being a valid argument? Well, for compatibility reasons,
> CMake stores all the "compiler flags" added this way as a single
> string, and just appends each new one with a space separator and
> without attempting any escaping. Then the shell / build tool uses
> the spaces to tokenise the flags.
> 
> Incidentally, if you do want to add actual flags, you should use
> add_compile_options() instead.

Thank you for your very complete answer.  :)

Here my case was about
    add_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)
so I guess add_definitions() is the way to go.

Regards
Frederik


More information about the Kde-buildsystem mailing list