CMake 检查“/etc/hosts”以进行 RPM 安装

CMake check '/etc/hosts' for RPM installation

我正在尝试为我的 CMakeLists.txt 编写一个简单的 execute_process 命令,以在安装 RPM 时检查主机文件中是否存在某段文本,如果它不存在,将其附加到主机文件。

但是,当 运行 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 的有用信息,因为文档含糊不清,而且几乎没有好的教程。

从 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

要在 spec 文件中使用 cmake 变量,您需要使用 configure_file.

生成它