How about just using forward slashes everywhere and use file(TO_NATIVE_PATH ...) for the variable substituted by configure_file(...).
That works without problems for me.
Then you don't have to have any "\\" for escaping or "\\\\" for twice escaping.

Clint

Pau Garcia i Quiles wrote:
I forgot to say if I edit the variable value in the Qt GUI and replace
"C://Intersystems//Cache" with "C:\\Intersystems\\Cache", the
backslashed value is stored in the cache and shdir.c contains the
expected output (with '\\').

But if I call CMake form the command line:
 cmake -DCALLIN_PATH:PATH="C:\\\\Intersystems\\\\Cache"

I get forward slashes in the CMake cache and in the generated shdir.c.
Interestingly, on Windows only 2 forward slashes make it into the
CMake cache but on Linux all 4 of them are in the CMake cache.

On Thu, Mar 5, 2009 at 11:14 PM, Pau Garcia i Quiles
<[email protected]> wrote:
Hello,

I started writing a bug report but I'm not really sure if this is a
bug or a feature.

On Win32, if you assign a path value to a variable in a
CMakeLists.txt, then open the CMakeLists.txt with the CMakeQtGui, it
will convert all the backslashes to forward-slashes, although this
might not be desired.

For example, I have this in my CMakeLists.txt:

IF( NOT DEFINED CALLIN_PATH )
 IF(WIN32)
   SET( CALLIN_PATH "C:\\\\Intersystems\\\\Cache" CACHE PATH "Path to
the Mgr directory in ISC Cache" FORCE )
 ELSE(WIN32)
   SET(CALLIN_PATH "/opt/cachesys" CACHE PATH "Path to the Mgr
directory in ISC Cache" FORCE )
 ENDIF(WIN32)
ENDIF( NOT DEFINED CALLIN_PATH )

On Win32, the Qt GUI shows CALLIN_PATH as "C://Intersystems//Cache"
and clicking "Configure" will store it in the CMake cache as
"C://Intersystems//Cache".

This is undesired behavior because you may want to use the value of
that variable to generate, for instance, a .c or .cpp file. In my
case, I have this shdir.c.cmake:

char shdir[256]="@CACHEMGRDIR@";

Doing:

CONFIGURE_FILE( 3rdparty/src/isccache/shdir.c.cmake
${LHDFAMILY_BINARY_DIR}/shdir.c )

Creates this shdir.c:

char shdir[256]="C://Intersystems//Cache";

Which made my application behave oddly because the path is not valid
but the file still compiles.

This behavior (replacing "\\" with "//") is consistent with what CMake
does when invoked from the command line. On the other hand, the (now
deprecated) CMakeSetup would not replace "\\" with "//", i. e.
CMakeSetup would show CALLIN_PATH as "C:\\Intersystems\\Cache" and
would generate this shdir.c, which is exactly what I want:

char shdir[256]="C:\\Intersystems\\Cache";

In the end, I'm not sure if this is a bug in CMake and the Qt GUI, or
it was a bug in CMakeSetup, but the CMakeSetup behavior is what a
Win32 user would expect.

(it's easy to work around the backslash-to-forwardslash substitution
with STRING, but it's not ideal and it's unexpected)

--
Pau Garcia i Quiles
http://www.elpauer.org
(Due to my workload, I may need 10 days to answer)






_______________________________________________
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

Reply via email to