我正在尝试为我的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的有用信息。
答案 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
生成它。