如何执行 shell 命令,并将输出分配给 configure.ac 中的 AC_DEFINE 变量

Posted

技术标签:

【中文标题】如何执行 shell 命令,并将输出分配给 configure.ac 中的 AC_DEFINE 变量【英文标题】:How do I execute a shell command, and assign the output to an AC_DEFINE variable in configure.ac 【发布时间】:2014-12-04 12:57:34 【问题描述】:

我需要确定软件的主要版本,为此主要是执行

命令--版本 |头| awk -F“。” '打印 $1'

现在,我需要将此输出分配给 AC_DEFINE 变量。

我试过了;

majorvar=$(command --version | head | awk -F "." 'print $1')

AC_DEFINE_UNQUOTED([myVar],["$majorvar"],[description])

这里的“命令”出现在生成的 config.h 文件中

AC_DEFINE([myVar],0,[descr])

AC_SUBST([myVar],[$(command --version | head | awk -F "." 'print $1')])

define (0) 设置的值出现在结果中的位置。

是否可以得到我想要的结果,即

#define myVar 5

或者我是否以错误的方式处理这个问题,如果是这样,我应该如何处理?

BR/帕特里克

【问题讨论】:

为什么是head 命令?你可以使用这个:command --version | awk -F "." 'NR==1print $1;exit' @hek2mgl 如果您要立即退出,则不需要NR==1 使用反引号而不是 $() 会改变什么吗? @EtanReisner 你确定 awk 不会继续遍历整个文件并执行NR==1 检查吗? (当然会产生false @hek2mgl 我不明白这个问题。您在该块中使用 exit 告诉 awk 停止处理文件。这意味着您在第一行之后停止。 (NR==1 在这一点上是正确的,但为什么要测试它?) 【参考方案1】:

我需要几个月的时间来理解宏的概念。 顾名思义,宏比脚本“更大”。我希望这个例子能有所帮助。

AC_DEFUN([VERSION],
[$(test -f $srcdir/VERSION && cat $srcdir/VERSION || AS_ECHO(["$PACKAGE_VERSION"]); )])

am_stable_version_rx='[[1-9]\.[0-9]+(\.[0-9]+)?]'
am_beta_version_rx="[$am_stable_version_rx[bdfhjlnprtvxz]]"

am_release_type=`AS_ECHO(["$VERSION"]) | LC_ALL=C awk ["
  /^$am_stable_version_rx$/  print \"stable\"; exit(0); 
  /^$am_beta_version_rx$/  print \"beta version\"; exit(0); 
   print \"development snapshot\"; "]`

test "$am_release_type" = stable || cat <<EOF

WARNING: You are about to use a $am_release_type of AC_PACKAGE_NAME VERSION.
WARNING: It might easily suffer from new bugs or regressions.
WARNING: You are strongly advised not to use it in production code.

Please report bugs, problems and feedback to <AC_PACKAGE_BUGREPORT>.
EOF

sn-p定义的代码:

    名为 VERSION 的宏函数 DEFUN 带有用于版本控制的正则表达式的脚本变量 一个脚本变量赋值,包含一个宏 AS_ECHO,它在配置脚本的生成过程中放置​​ VERSION 脚本。

【讨论】:

以上是关于如何执行 shell 命令,并将输出分配给 configure.ac 中的 AC_DEFINE 变量的主要内容,如果未能解决你的问题,请参考以下文章

在 gruntfile 中执行 shell 脚本并将结果分配给变量

如何将 Bash 命令的输出分配给变量? [复制]

命令与如何获取命令帮助

如何将命令的输出分配给 Makefile 变量

如何让php执行shell

如何在使用“ls”命令以及将输出分配给变量时抑制标准错误?