首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autoconf :如何获得字符串中的程序输出,并检查其中是否存在另一个字符串

Autoconf :如何获得字符串中的程序输出,并检查其中是否存在另一个字符串
EN

Stack Overflow用户
提问于 2021-06-24 15:03:34
回答 1查看 215关注 0票数 0

我正在用Python开发一个Qt应用程序。它使用一个需要编译的资源文件。我正在使用自动工具来管理我的项目的编译和安装。

现在,为了使资源文件能够被应用程序使用,它需要使用编译程序(pyrcc)的特定版本进行编译。我可以通过将pyrcc -version的输出放在configure.ac中的一个变量中来获得版本。但是,我不知道如何检查输出中是否存在字符串pyrcc5。如果它不存在,我想告诉用户他的PyRCC程序有错误的版本,并中止configure

此外,我希望避免程序输出需要额外的变量,而是这样做(伪代码):

代码语言:javascript
复制
if "pyrcc5" not in output of "pyrcc -version":
    say "pyrcc has wrong version"
    exit 1

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 05:33:18

在为Autoconf编写configure.ac时,请始终记住,您基本上是在编写shell脚本。Autoconf提供了大量的宏,为您提供了大量的杠杆,但您通常至少可以了解基本的“我如何在Autoconf中做X?”而是问:“在一个可移植的shell脚本中,我将如何做X?”

特别是为了..。

我想避免程序输出需要一个额外的变量,而是这样做(伪代码):

如果"pyrcc5“不在"pyrcc -version”的输出中:例如"pyrcc有错误的版本“退出1

..。用于此类任务的可移植外壳脚本通常使用的工具是grep,而且幸运的是,将其应用于任务的最简单方法不需要中间变量。例如,这完全实现了您的伪代码(没有向控制台发出任何无关的消息):

代码语言:javascript
复制
if ! pyrcc -version | grep pyrcc5 >/dev/null 2>/dev/null; then
  echo "pyrcc has wrong version"
  exit 1
fi

它将pyrcc -version的输出输送到grep中,并且依赖于这样一个事实,即grep以成功的状态退出当且仅当它找到了任何匹配。

事实上,您可以将其准确地放在configure.ac中,但更多的是习惯于

  • 使用常用的Autoconf机制来定位pyrccgrep,并使用以这种方式发现的版本;
  • 使用Autoconf AS_IF宏来编写if构造,而不是编写它为发出“检查.”的标准自动#en0#机制。消息和报告其结果;
  • 使用标准的Autoconf机制输出失败消息和

当然,所有这些都使上述工作更加复杂,但也更加灵活和便携。看起来可能是这样的:

代码语言:javascript
复制
AC_ARG_VAR([PYRCC], [The name or full path of pyrcc. Version 5 is required.])

# ...

AC_PROG_GREP
AC_CHECK_PROGS([PYRCC], [pyrcc5 pyrcc], [])
AS_IF([test "x${PYRCC}" = x],
  [AC_MSG_ERROR([Required program pyrcc was not found])])

# ...

AC_MSG_CHECKING([whether ${PYRCC} has an appropriate version])
AS_IF([! pyrcc -version | grep pyrcc5 >/dev/null 2>/dev/null], [
  AC_MSG_RESULT([no])
  AC_MSG_ERROR([pyrcc version 5 is required, but ${PYRCC} is a different version])
], [
  AC_MSG_RESULT([yes])
])

除了可移植性和传统的Autoconf进度消息传递之外,它还使构建器能够将特定的pyrcc可执行文件指定为configure (通过在其环境中设置变量PYRCC )、在configure的帮助文本中设置文档,并将PYRCC导出为make变量。

哦,我也偷偷地给pyrcc取了pyrcc5的支票,不过我不知道这在实践中是否有用。

最后的结果不再像我首先提供的shell脚本片段,我同意。但是,也可以按原样使用纯shell脚本片段,而且完全自动没收的版本也直接从纯脚本派生出来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68118259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档