CMake проверка '/ etc / hosts' для установки RPM - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь написать простую команду execute_process для моего CMakeLists.txt, чтобы проверить наличие определенного фрагмента текста в файле hosts при установке RPM, и если его там нет,добавьте его в файл hosts.

Однако при запуске CMake я получаю сообщение:

grep ||: No such file or directory
grep: echo: No such file or directory
grep: 172.16.10.43 UPSSERVER: No such file or directory
grep: >>: No such file or directory

Кажется, что каждая часть моей исполняемой команды является файлом?Вот команда, о которой идет речь:

set(HOSTS_UPSSERVER "172.16.10.43 UPSSERVER")
execute_process(COMMAND grep -qxF ${HOSTS_UPSSERVER} /etc/hosts || echo ${HOSTS_UPSSERVER} >> /etc/hosts)

Я знаю, что сама команда работает, потому что я тестировала ее самостоятельно вне командной строки.Есть ли ошибка в синтаксисе способа, которым я определил переменную HOSTS_UPSSERVER?Или то, как я использую команду execute_process?

Мне не повезло найти полезную информацию о CMake, поскольку документация расплывчатая, а хороших учебников практически не существует.

1 Ответ

0 голосов
/ 28 января 2019

Проверка /etc/hosts из cmake не имеет смысла, так как вы будете проверять только файл на хосте сборки.Чтобы запустить скрипт во время установки RPM, вам нужно включить код в сам RPM, предоставив файл спецификации.Во время генерации RPM через cpack вы можете настроить файл спецификации с помощью CPACK_RPM_USER_BINARY_SPECFILE

В файле спецификации вы должны определить несколько параметров как имя пакета и зависимости.Чтобы запустить скрипт после установки, вам нужно добавить его в раздел %post:

%post
grep -qxF ${HOSTS_UPSSERVER} /etc/hosts || echo ${HOSTS_UPSSERVER} >> /etc/hosts

Чтобы использовать переменные cmake в файле спецификации, вам нужно сгенерировать его, используя configure_file.

...