[CMake] configure_file - false vs "0"

Michael Wild themiwi at gmail.com
Sun Aug 9 17:10:58 EDT 2009


On 9. Aug, 2009, at 22:49, James C. Sutherland wrote:

>>>>>>
>>>>>> In my configure.h.in file I have:
>>>>>>
>>>>>> #cmakedefine TEST_VAR_VALUE
>>>>>>
>>>>>> In my CMakeLists.txt file I have:
>>>>>>
>>>>>> configure_file( ${PROJECT_SOURCE_DIR}/src/config.h.in $ 
>>>>>> {PROJECT_SOURCE_DIR}/src/configure.h )
>>>>>> set( TEST_VAR_VALUE  "0" )
>>>>>>
>>>>>> This results in a configure.h file containing:
>>>>>> /* #undef TEST_VAR_VALUE */
>>>>>>
>>>>>> But what I would like is:
>>>>>> #define TEST_VAR_VALUE 0
>>>>>>
>>>>>>
>>>>>> So basically cmake is seeing the value of TEST_VAR_VALUE as 0  
>>>>>> and treating it as "false" rather than a value.
>>>>>>
>>>>>> Any ideas how to accomplish this?
>>>>>>
>>>>>> James
>>>>>>
>>>>>
>>>>>
>>>>> Use the (undocumented) #cmakedefine01.
>>>>>
>>>>> I already submitted a patch, and the documentation has been  
>>>>> fixed in CVS.
>>>>>
>>>>> Michael
>>>>>
>>>>
>>>> Thanks!  That did it.
>>>
>>>
>>> Okay - I spoke too soon.  It gave me a partial solution.
>>>
>>> What if I want to have something like
>>> #define TEST_VAR_VALUE 5
>>>
>>> In the .in file:
>>> #cmakedefine TEST_VAR_VALUE ${TEST_VAR_VALUE}
>>> doesn't work (for reasons mentioned above)
>>>
>>> However,
>>> #cmakedefine01 TEST_VAR_VALUE ${TEST_VAR_VALUE}
>>> results in
>>> #define TEST_VAR_VALUE 5 1
>>> if I have
>>> set( TEST_VAR_VALUE 5 )
>>> in my CMakeLists.txt file.
>>>
>>> Can I get rid of the trailing value?
>>>
>>
>> Aah, now I see what you want...
>>
>> #define TEST_VAR_VALUE ${TEST_VAR_VALUE}
>>
>> is what you want.
>
>
> But if I do
>  set( TEST_VAR_VALUE 0 )
> then this results in TEST_VAR_VALUE being undefined rather than  
> having the value of 0 as I want.  If the value is anything other  
> than zero it works.  This is what I tried to explain in my original  
> (probably unclear) post...
>

$ cat CMakeLists.txt
cmake_minimum_required( VERSION 2.6 )
project( test )
set( TEST_VAR_VALUE1 0 )
set( TEST_VAR_VALUE2 1 )
set( TEST_VAR_VALUE3 "hello there" )
configure_file( config.h.in ${test_BINARY_DIR}/config.h )

$ cat config.h.in
#define TEST_VAR_VALUE1 ${TEST_VAR_VALUE1}
#define TEST_VAR_VALUE2 ${TEST_VAR_VALUE2}
#define TEST_VAR_VALUE3 ${TEST_VAR_VALUE3}

$ mkdir build && cd build && cmake ..
$ cat config.h
#define TEST_VAR_VALUE1 0
#define TEST_VAR_VALUE2 1
#define TEST_VAR_VALUE3 hello there


Which presumably is what you want... why would you think that  
SET(TEST_VAR_VALUE 0) "undefines" it? For that you either use  
SET(TEST_VAR_VALUE), or with newer versions of CMake you can use the  
clearer UNSET(TEST_VAR_VALUE).


Michael


More information about the CMake mailing list