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

Posted

技术标签:

【中文标题】CMake 检查 \'/etc/hosts\' 以进行 RPM 安装【英文标题】:CMake check '/etc/hosts' for RPM installationCMake 检查 '/etc/hosts' 以进行 RPM 安装 【发布时间】:2019-01-28 19:45:11 【问题描述】:

我正在尝试为我的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 的有用信息,因为文档含糊不清,而且几乎不存在好的教程。

【问题讨论】:

"...因为文档含糊不清..." - 嗯? execute_process 的文档明确指出,在COMMAND 参数中:“...诸如> 的shell 运算符被视为普通参数。(使用INPUT_*OUTPUT_* , 和 ERROR_* 选项来重定向标准输入、标准输出和标准错误。)”。另请参阅该问题:***.com/questions/35689501/… 【参考方案1】:

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

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

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

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

【讨论】:

啊,我已经有一个安装后脚本了。我仍然不明白其中的任何一个是如何工作的,并且在我去的时候正在弥补。那我会把它放在我的安装后脚本中。

以上是关于CMake 检查 '/etc/hosts' 以进行 RPM 安装的主要内容,如果未能解决你的问题,请参考以下文章

修改电脑hosts文件

Ubuntu配置DNS

Ubuntu配置DNS

使用/ etc / hosts文件中的s调试sudoers regex模式以更改IP地址

访问限制

etc/hosts文件详解