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 安装的主要内容,如果未能解决你的问题,请参考以下文章