[CMake] set_target_properties not setting COMPILE_DEFINITIONS?

Andreas Pakulat apaku at gmx.de
Mon Mar 28 14:52:54 EDT 2011


On 28.03.11 14:43:01, David Doria wrote:
> On Mon, Mar 28, 2011 at 2:31 PM, David Doria <daviddoria at gmail.com> wrote:
> > On Mon, Mar 28, 2011 at 2:28 PM, Yuri Timenkov <yuri at timenkov.ru> wrote:
> >> Try prefixing definitions with -D
> >
> > I changed to:
> > SET(MAIN_BUILD_DEFINITIONS "${MAIN_BUILD_DEFINITIONS} -DUNIX;")
> > SET(MAIN_BUILD_DEFINITIONS "${MAIN_BUILD_DEFINITIONS} -DPIXEL_DIMENSION=3;")
> >
> > and I get:
> >
> > <command-line>: error: macro names must be identifiers
> >
> > I think you don't have to add -D when you set COMPILE_DEFINITIONS, but
> > you do if you set COMPILE_FLAGS.
> >
> > David
> >
> 
> Hm, I noticed that if I do this:
> 
> set(my_definitions "UNIX;USE_ITK;USE_FLOAT_PIXELS;")
> message("my definitions: " ${my_definitions})
> 
> the output is:
> 
> UNIXUSE_ITKUSE_FLOAT_PIXELS
> 
> but If I put spaces after the semicolons:
> 
> set(my_definitions "UNIX; USE_ITK; USE_FLOAT_PIXELS;")
> 
> the output is:
> 
> UNIX USE_ITK USE_FLOAT_PIXELS
> 
> In neither case are the semicolons preserved, which seems bad because
> the set_target_properties call expects a semicolon separated list of
> preprocessor definitions. Why are these semicolons being removed? They
> are in a string (" "), right?

No, the semicolons are removed by message() itself, you'll still see
them if you enclose the ${} inside the quotes:

message( "DEFS: ${MAIN_BUILD_DEFINITIONS}" )

Andreas



More information about the CMake mailing list