[CMake] Changing definitions at compile time
Michael Wild
themiwi at gmail.com
Tue Jun 14 15:26:21 EDT 2011
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
More information about the CMake
mailing list