CMake检查'/ etc / hosts'以安装RPM

时间:2019-01-28 19:45:12

标签: cmake cpack

我正在尝试为我的execute_process写一个简单的CMakeLists.txt命令,以检查安装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 :(得分:0)

从cmake内检查/etc/hosts是没有意义的,因为您只检查构建主机上的文件。要在RPM安装期间运行脚本,您需要通过提供一个规范文件在RPM本身中包含代码。在通过cpack生成RPM的过程中,您可以通过CPACK_RPM_USER_BINARY_SPECFILE

配置规范文件

在spec文件中,您必须定义几个参数,例如程序包名称和依赖项。要在安装后运行脚本,您需要将其添加到%post部分:

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

要在规范文件中使用cmake变量,您需要使用configure_file生成它。