CMake запускает пользовательскую команду со смешанными сценариями оболочки - PullRequest
0 голосов
/ 14 января 2020

Допустим, мы хотим запустить следующую команду в CMake add_custom_command:

echo "#define FOO \"$(sh tools/foo.sh)\"" > foo.h

foo. sh - это скрипт, поддерживаемый другими, поэтому мы не могли легко изменить это здесь.

Проблема в том, что CMake не будет оценивать \"$(sh tools/foo.sh)\"' in add_costom_command`, а просто скопирует их непосредственно в foo.h , что, очевидно, не то, что мы хотим.

В сгенерированном build.make я нашел что-то вроде:

echo "#define FOO \"\$$(sh tools/foo.sh)\"" > .../foo.h

Каковы правила выхода для CMake add_custom_command COMMAND?

Как мне написать команду в add_custom_command COMMAND?

1 Ответ

0 голосов
/ 14 января 2020

Синтаксис CMake сумасшедший, и нелегко сделать этот тип экранирования (включает , и ). Чтобы обойти это, я предлагаю вам поместить команду оболочки в отдельный файл (например, helper.sh) в директорию вашего проекта, а затем назвать ее так -

add_custom_command(
  ...
  COMMAND bash ${PROJECT_SOURCE_DIR}/helper.sh > foo.h
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...