[CMake] Problem with CONFIGURE_FILE and cmakedefine

Karthik Krishnan Karthik.Krishnan at kitware.com
Tue Mar 21 19:03:01 EST 2006


Karthik Krishnan wrote:

> Hello,
>
> CMakeLists.txt:
>  SET( NAMESPACE "vtk" )
>  SET( ${NAMESPACE}_OPTION "ON" )
>  CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/foo.h.in 
> ${CMAKE_CURRENT_BINARY_DIR}/foo.h @ONLY IMMEDIATE )
>
> foo.h.in
>   #cmakedefine @NAMESPACE at _OPTION
>
>
> This does not place the #define vtk_OPTION in foo.h. Replacing the 
> @NAMESPACE@ in foo.h.in with vtk works though.
> It looks like the CONFIGURE_FILE is being parsed after the 
> #cmakedefine checks.
>
> Is this intended behaviour ?

Never mind, answering myself, can be done with a double configure.

CMakeLists.txt:
  SET( NAMESPACE "vtk" )
  SET( ${NAMESPACE}_OPTION "ON" )
  SET( CMAKEDEFINE "#cmakedefine" )
  CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/foo.h.in 
${CMAKE_CURRENT_BINARY_DIR}/tmp.h.in @ONLY IMMEDIATE)
  CONFIGURE_FILE( ${CMAKE_CURRENT_BINARY_DIR}/tmp.h.in 
${CMAKE_CURRENT_BINARY_DIR}/foo.h @ONLY IMMEDIATE)

foo.h.in
  @CMAKEDEFINE@ @NAMESPACE at _OPTION

Still wondering if that was the intended behaviour. (cmake version 
2.3-20060128)

Thanks
-karthik

>
> thanks
> -karthik
>
> Alexander Neundorf wrote:
>
>> Hi,
>> recently cmake cvs has the new FILE() command:
>> FILE(SYSTEM_PATH ENVIRONMENT_VARIABLE _variable)
>> Now, there's the case that some tool outputs a list of directories 
>> (e.g. kde-config), which will also contain the backward slashes. For 
>> use with cmake the backslashes have to be replaced forward slashes. 
>> Basically this is what is done with FILE(SYSTEM_PATH ...) But this 
>> doesn't work for output from applications.
>> We have currently the following code in FindKDE4.cmake:
>> # then ask kde-config for the kde data dirs 
>> EXEC_PROGRAM(${KDE4_KDECONFIG_EXECUTABLE} ARGS --path data 
>> OUTPUT_VARIABLE _data_DIR )
>> IF(WIN32)   # cmake can't handle paths with '\' correct :-(   
>> STRING(REGEX REPLACE "\\\\" "/" _data_DIR "${_data_DIR}") ELSE(WIN32) 
>>   # replace the ":" with ";" so that it becomes a valid cmake list   
>> STRING(REGEX REPLACE ":" ";" _data_DIR "${_data_DIR}") ENDIF(WIN32)
>>
>> Maybe it would be a better idea to remove FILE(SYSTEM_PATH ...) again 
>> and instead add something like this:
>> set(myPath $ENV{KDEDIRS}) TO_CMAKE(myKdeDirs ${myPath})  ?
>> This would work for both cases, the env. var and if the content comes 
>> from somewhere else. What do you think ?
>> Bye Alex
>>
>>
>>  
>>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>


More information about the CMake mailing list