Почему CMake при выполнении команды префикс пробелов с обратной косой чертой? - PullRequest
9 голосов
/ 19 января 2012

У меня есть пользовательская команда в CMakeLists.txt:

set(testfiles "test1 test2")
add_custom_target(testtouch COMMAND touch ${testfiles})

Когда я запускаю «make testtouch VERBOSE = 1», я вижу, что он выполняет:

touch test1\ test2

Это всего лишь пример, но у меня есть проблема в реальном проекте, и "\" нарушают команду. Обратите внимание, что я получаю переменную (здесь testfiles) из скрипта Find и не могу просто избавиться от двойных кавычек.

Почему CMake делает это?

Как этого избежать?

Ответы [ 2 ]

7 голосов
/ 20 января 2012

Поскольку иногда разница между типом переменной списка cmake и строковым литералом cmake становится важной.

Попробуйте изменить настройку переменной следующим образом, чтобы избежать проблемы:

set(testfiles "test1" "test2")
0 голосов
/ 23 августа 2018

Я пробовал что-то подобное с несколькими аргументами, некоторые из которых являются строками, а некоторые нет, то есть:

add_custom_target(externalProject COMMAND make -s VALUE1:="${argument1}" VALUE2:=${argument2} VALUE3:="${argument3}" ...)

Где argument3 содержит "VAL1 VAL2 VAL3".

Я обнаружил, что заменапробелы с точкой с запятой ; решили проблему для меня, когда cmake создает make-файл.

...