Как оставить "$ {txt}" в файле конфигурации cmake? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть файл CMakeLists.txt и строка в нем:

configure_file ( script.tcl.in script.tcl )

cmake успешно меняет заголовки, где мне нужно, но в файле есть script.tcl.in с такимилинии:

set list "1 2 3"
set line "param "
foreach a $list{
  line = ${line}_$a
}

В этом блоке я хочу получить строку "param _1_2_3".

После запуска cmake я получаю файл script.tcl но он заменяет $ {line} на none, потому что $ {smth} является параметром в cmake:

set list "1 2 3"
set line "param "
foreach a $list{
  line = _$a
}

Проблема состоит в том, что cmake и tcl использовать тот же формат $ {var} для получения значения переменной var .Итак, вопрос в том, что мне нужно сделать, чтобы получить этот блок, как он есть в script.tcl.in файле?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Передача опции @ONLY в configure_file заставляет CMake не трогать ${...} выражения, а заменять только @VAR@ выражения.

configure_file ( script.tcl.in script.tcl @ONLY)

Если символ @ не имеет специального значения для конкретного языка сценариев (для которого вы готовите сценарий), использование @ONLY является ценным подходом.

0 голосов
/ 08 октября 2018

Возможный обходной путь заключается в создании замены в Tcl с использованием format:

line = [format "%s_%s" $line $a]

(Остальная часть этой строки выглядит подозрительно для меня действительно ; Tcl использует команду set для присваивания, а не встроенный оператор =. И, похоже, у вас есть другая проблема с синтаксисом и в предыдущей строке.)

...