[CMake] Why are blank-delimited strings in commands escaped on Linux?

Hendrik Sattler post at hendrik-sattler.de
Fri Oct 2 07:18:18 EDT 2009


Zitat von Claudio Bley <b_l_e_y at ml1.net>:
>> set(a "hello world\\ hello world")
>> message(STATUS "a = ${a}")
>> set(a_list ${a})
>> message(STATUS "a_list = ${a_list}")
>>
>> The result is
>>
>> -- a = hello world\ hello world
>> -- a_list = hello world\ hello world
>
> So, the real issue here is that your CAIRO_LINK_FLAGS variable just
> contains a single string, where it should contain a list instead.
>
> You should fix that in your OCaml /PLplot module.

He gets that from external tools. They ususally do not provide cmake lists.
But I think that his example is wrong, it should be:
set(a "-Lfoo -lbar")
message(STATUS "a = ${a}")
set(a_list ${a})
message(STATUS "a_list = ${a_list}")

Then the result should be
  -- a = -Lfoo -lbar
  -- a_list = -Lfoo;-lbar

But beware that cmake lists are not the answer to everything as you  
cannot nest them. This is a problem with custom java command on  
non-Windows systems (where the argument to -cp option is also  
seperated by ';'). Maybe, no surely, that's a bug (there is absolutely  
no quoting for such list members possible, not "foo;bar" and not  
foo\;bar).

HS




More information about the CMake mailing list