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