[CMake] Append to property COMPILE_DEFINITIONS

Florian Lindner mailinglists at xgm.de
Sun Jul 23 22:32:03 EDT 2017



Am 22.07.2017 um 15:36 schrieb Craig Scott:
> 
> On Tue, Jul 18, 2017 at 8:50 PM, Florian Lindner <mailinglists at xgm.de <mailto:mailinglists at xgm.de>> wrote:
> 
>     #Works, but I would prefer to have it just once for all targets and at the top of the file
>     set_property(TARGET testprecice APPEND
>       PROPERTY COMPILE_DEFINITIONS "FOO")
> 
>     > BTW, you don't include the -D when adding to COMPILE_DEFINITIONS, just put FOO, not -DFOO. Have a read of the docs, they may give you other clues for this property (e.g. using the ..._CONFIG variant of it).
> 
>     Yeah, I found out that I don't have to add -D. The docs say that generator expressions are preferable to using _CONFIG
>     variant.
> 
> 
> So just to be crystal clear, this is what I would have expected to work if you wanted the symbol FOO to be defined for
> Debug builds for all targets in the current directory and below:
> 
> set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:FOO>)

Put that in my CMakeLists.txt. Works, but only when I build in the same directory where the CMakeLists.txt file is
located, i.e. in source builds. That way:

set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY COMPILE_DEFINITIONS  $<$<CONFIG:Debug>:FOO>)

it works also out of tree.

Still, I don't undertand what is wrong with:

set_property(GLOBAL APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:-FOO>)

?

Best,
Florian


> 
> Note that this directory property is NOT used to initialise the corresponding target property. Rather, BOTH are combined
> to give the final set of command line compile definitions. It does not matter whether this directory property is set
> before or after you call add_executable() within the same CMakeLists.txt file (or more accurately, within the same
> directory scope).
> 
> 
> 
>     >
>     >
>     > On Tue, Jul 18, 2017 at 1:21 PM, Florian Lindner <mailinglists at xgm.de <mailto:mailinglists at xgm.de> <mailto:mailinglists at xgm.de <mailto:mailinglists at xgm.de>>> wrote:
>     >
>     >     Am 18.07.2017 um 10:59 schrieb Craig Scott:
>     >     > You appear to be setting a GLOBAL property where you probably meant DIRECTORY. You could also consider setting the
>     >     > target property instead rather than applying it to all targets (unless that's what you want).
>     >
>     >     I tried to set the property on all targets, therefore I thought GLOBAL is the right thing.
>     >
>     >     However,
>     >
>     >     set_property(DIRECTORY "${CMAKE_SOURCE_DIR}/src" APPEND
>     >       PROPERTY COMPILE_DEFINITIONS "-DFOO")
>     >
>     >     hasn't had any effect either.
>     >
>     >     set_property(TARGET testprecice APPEND
>     >       PROPERTY COMPILE_DEFINITIONS "FOO")
>     >
>     >     works. But setting it on all targets is exactly what I want. How can I do that?
>     >
>     >     Best,
>     >     Florian
>     >
>     >     >
>     >     >
>     >     > On Tue, Jul 18, 2017 at 12:56 PM, Florian Lindner <mailinglists at xgm.de <mailto:mailinglists at xgm.de> <mailto:mailinglists at xgm.de <mailto:mailinglists at xgm.de>>
>     >     <mailto:mailinglists at xgm.de <mailto:mailinglists at xgm.de> <mailto:mailinglists at xgm.de <mailto:mailinglists at xgm.de>>>> wrote:
>     >     >
>     >     >     Hello,
>     >     >
>     >     >     I want to add compile definitions. Since I want to use generator expressions, I can't use add_definitions, but
>     >     have to
>     >     >     use the COMPILE_DEFINITIONS property, but neither:
>     >     >
>     >     >     set_property(GLOBAL APPEND
>     >     >       PROPERTY COMPILE_DEFINITIONS "-DFOO")
>     >     >
>     >     >     for testing
>     >     >
>     >     >     or
>     >     >
>     >     >     set_property(GLOBAL APPEND
>     >     >       PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:-DDebug>)
>     >     >
>     >     >     which should be final result, produces any -DFOO compiler switches.
>     >     >
>     >     >     I also tried placing it before and after the add_executable call.
>     >     >
>     >     >     What is wrong with that call?
>     >     >
>     >     >     Thanks,
>     >     >     Florian
> 
>  
> -- 
> Craig Scott
> Melbourne, Australia
> https://crascit.com


More information about the CMake mailing list