[CMake] escaping spaces in paths with cmake -E commands?

Brad King brad.king at kitware.com
Mon May 8 09:40:54 EDT 2006


Zachary Pincus wrote:
> Hi folks,
> 
> I'm using CMake 2.2-3, and have recently run into some problems with  a 
> stanza of CMake code that looks like this:
> 
> SET(src "${IN_DIR}/foo.bar")
> SET(tgt "${OUT_DIR}/foo.bar")
> EXEC_PROGRAM(${CMAKE_COMMAND} ARGS -E copy_if_different ${src} ${tgt})
> 
> The problem comes when src or tgt have spaces in the paths -- the  exec 
> fails (obviously). Slightly less obviously, this also fails:
> EXEC_PROGRAM(${CMAKE_COMMAND} ARGS -E copy_if_different "${src}" "$ {tgt}")
> 
> This seems to work, but I'm not sure if it is portable:
> EXEC_PROGRAM(${CMAKE_COMMAND} ARGS -E copy_if_different "'${src}'" "'$ 
> {tgt}'")
> 
> Is there a better option?
> 
> Now, when I had set this all up in the context of an  ADD_CUSTOM_COMMAND 
> instead of an EXEC_PROGRAM, things seemed to work  -- is there automatic 
> path escaping for args to custom commands, but  not exec'd programs, in 
> this version of CMake? (For some reason, we  had to move to EXEC_PROGRAM 
> instead of using a custom command...)

The EXECUTE_PROCESS command in CMake 2.4 fixes this and handles argument 
escaping automatically just like custom commands.

-Brad


More information about the CMake mailing list