[CMake] Changing definitions at compile time

Andreas Naumann Andreas-Naumann at gmx.net
Tue Jun 14 15:33:15 EDT 2011


Am 14.06.2011 21:26, schrieb Michael Wild:
> On 06/14/2011 09:12 PM, Andreas Naumann wrote:
>    
>> Am 14.06.2011 19:26, schrieb Michael Wild:
>>      
>>> On 06/14/2011 07:12 PM, Kfir Lavi wrote:
>>>
>>>        
>>>> On Tue, Jun 14, 2011 at 8:04 PM, Andreas Naumann
>>>> <Andreas-Naumann at gmx.net<mailto:Andreas-Naumann at gmx.net>>   wrote:
>>>>
>>>>       Am 14.06.2011 18:12, schrieb Kfir Lavi:
>>>>
>>>>          
>>>>>       Hi,
>>>>>       I need to compile the code twice. Once with -DA and once with -DB
>>>>>       My code look like this:
>>>>>       add_definitions(-DA)
>>>>>       add_library(${mylib_A} SHARED ${myfiles})
>>>>>       remove_definitions(-DA)
>>>>>
>>>>>       add_definitions(-DB)
>>>>>       add_library(${lib_B} SHARED ${myfiles})
>>>>>       remove_definitions(-DB)
>>>>>
>>>>>       What cmake does is to define A and then remove it, so in compile
>>>>>       time, there
>>>>>       is now definition of A or B.
>>>>>
>>>>>       How do I tell cmake that the remove needs to  be in compile time?
>>>>>
>>>>>       Regards,
>>>>>       Kfir
>>>>>
>>>>>            
>>>>       You want to create two libraries A and B from the same sourcefiles
>>>>       ${myfiles}. The first one have to be compiled with -DA and the
>>>>       second one with -DB, haven't it?
>>>>
>>>>       So you could simply set the COMPILE_FLAGS property with
>>>>       add_library(A ${myfiles})
>>>>       add_library(B ${myfiles})
>>>>
>>>>       set_target_properties(A PROPERTIES COMPILE_FLAGS "-DA")
>>>>       set_target_properties(B PROPERTIES COMPILE_FLAGS "-DB")
>>>>
>>>>       Regards,
>>>>       Andreas
>>>>
>>>>
>>>> Thanks,
>>>> This solved my problems.
>>>>
>>>> Again thanks,
>>>> Kfir
>>>>
>>>>          
>>> Except that COMPILE_FLAGS is the wrong property. You should use
>>> COMPILE_DEFINITIONS without the -D prefix.
>>>
>>> Michael
>>>
>>>
>>>        
>> correct me, if I am wrong, but at
>> http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_target_properties
>>
>> there is no property "COMPILE_DEFINITIONS".
>>
>> If I search through the documentation, I get to the target properties.
>>
>> It seems to me, that COMPILE_DEFINITIONS can set only preprocessor
>> definitions like -DVAR=VALUE with
>> set_target_properties(targ PROPERTIES COMPILE_DEFINITIONS "VAR=VALUE").
>> But if I have a special compiler flag like
>> -flag:flag_value
>> I should use
>> set_target_properties(targ PROPERTIES COMPILE_FLAGS "-flag:flag_value")
>>
>> ?
>>
>> Andreas
>>      
> The assignment part is AFAIK optional (probably should be mentioned in
> the docs). And yes, to pass special flags, use COMPILE_FLAGS.
> COMPILE_DEFINITIONS should be exclusively used for preprocessor-symbols,
> as is the command add_definitions().
>
> Michael
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>
>    
You are right. The assignment is optional, as said in the documentation.

Andreas


More information about the CMake mailing list