【问题标题】: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_* 选项来重定向标准输入、标准输出和标准错误。)”。另请参阅该问题:stackoverflow.com/questions/35689501/…

标签: cmake cpack


【解决方案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 生成它。

【讨论】:

  • 啊,我已经有一个安装后脚本了。我仍然不明白其中的任何一个是如何工作的,并且在我去的时候正在弥补。那我会把它放在我的安装后脚本中。
猜你喜欢
  • 1970-01-01
  • 2014-10-20
  • 2014-01-14
  • 2011-02-17
  • 1970-01-01
  • 2016-04-19
  • 2012-12-15
  • 2015-06-16
  • 2021-04-12
相关资源
最近更新 更多