[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