我正在尝试测试是否ANDROID_NDK_ROOT
在Autoconf脚本中设置了。相关节如下所示。根据如何检查环境变量?在自动配置邮件列表中,我可以使用:
if test "${var+set}" = set; then
echo "variable \$var is set to: $var"
fi
该变量未设置,但未AC_MSG_ERROR
执行。
$ printenv | grep ANDROID_NDK_ROOT
$
而是,测试产生以下错误:
./configure: line 20616: syntax error near unexpected token `('
./configure: line 20616: ` $as_echo_n "(cached) " >&6'
(线程中还有另一个答复,但这似乎只是评论而不能回答问题)。
如何测试是否在Autoconf中设置了环境变量?
这是我要在其中执行的节configure.ac
:
# if test "$IS_ANDROID_OS" != "0"; then
if true; then
if test "${ANDROID_NDK_ROOT+set}" != set; then
AC_MSG_ERROR([ANDROID_NDK_ROOT is not set. Please set ANDROID_NDK_ROOT])
fi
THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h"
AC_CHECK_FILE([$THIS_FILE],
[cp "$THIS_FILE" "$ac_srcdir"],
AC_MSG_RESULT([cpu-features.h does not exist in ANDROID_NDK_ROOT, skipping])
)
THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c"
AC_CHECK_FILE([$THIS_FILE],
[cp "$THIS_FILE" "$ac_srcdir"],
AC_MSG_RESULT([cpu-features.c does not exist in ANDROID_NDK_ROOT, skipping])
)
fi
这是configure
from的一部分cat -n
:
20610
20611 THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c"
20612 as_ac_File=`$as_echo "ac_cv_file_$THIS_FILE" | $as_tr_sh`
20613 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $THIS_FILE" >&5
20614 $as_echo_n "checking for $THIS_FILE... " >&6; }
20615 if eval \${$as_ac_File+:} false; then :
20616 $as_echo_n "(cached) " >&6
20617 else
20618 test "$cross_compiling" = yes &&
20619 as_fn_error $? "cannot check for file existence when cross compiling""$LINENO" 5
20620 if test -r "$THIS_FILE"; then
20621 eval "$as_ac_File=yes"
20622 else
20623 eval "$as_ac_File=no"
20624 fi
Shell语法用于测试是否设置了变量没有错,并且可以与Autoconf一起正常工作。
该问题似乎是由于未能将AC_CHECK_FILE()
宏的第三个参数引号引起的。您应始终对每个宏引用(用方括号括起来)每个参数,尤其是当该参数本身是或包含宏调用时。configure
通过将您提供的示例代码包装在anAC_INIT
和an之间,可以重现语法错误AC_OUTPUT
,但是使用正确的引用可以消除此错误。具体来说,在这里:
THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h"
AC_CHECK_FILE([$THIS_FILE],
[cp "$THIS_FILE" "$ac_srcdir"],
[AC_MSG_RESULT([cpu-features.h does not exist in ANDROID_NDK_ROOT, skipping])]
)
THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c"
AC_CHECK_FILE([$THIS_FILE],
[cp "$THIS_FILE" "$ac_srcdir"],
[AC_MSG_RESULT([cpu-features.c does not exist in ANDROID_NDK_ROOT, skipping])]
)
如果不引用该参数,则会导致该参数被扩展太多次,并且所得到的输出确实不是语法上有效的shell代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句