我如何使用"测试STRING1 = STRING2"在AC_TRY_RUN内?

时间:2014-06-02 15:34:05

标签: cross-compiling configure autoconf m4

我正在尝试修补configure.in文件,以便为某个包启用交叉编译。到目前为止,我只是修补AC_TRY_RUN宏,以使它们能够跳过已编译代码的执行,并使用包含测试结果的预定义变量,该变量应该先验运行。

在文件的开头,我插入了这样的行:

dnl -- The following block is used to allow cross-compilation:
CROSSCTEST00=yes dnl -- the result of test 0
CROSSCTEST01=yes dnl -- the result of test 1 
...
CROSSCTESTNN=yes dnl -- the result of test N 
dnl --

dnl This is where this file started previously:
AC_INIT(pl-wam.c)
AC_PREREQ([2.66])

AC_CONFIG_HEADER(config.h)
AC_SUBST(COFLAGS)
AC_SUBST(CWFLAGS)
... 

然后,我正在使用AC_TRY_RUN的第四个参数:

AC_TRY_RUN([ // piece of C code ],
    [actions if exit(0)],
    [actions if exit(1)],
    if test "x$CROSSCTEST00" = xyes; then
        dnl same actions if exit(0)
    else
        dnl same actions if exit(1)
    fi)

但它不起作用。尽管$ CROSSCTEST为yes,但test ...永远不会成立。我也尝试过另一种方法:

AC_TRY_RUN([ // piece of C code ],
    [actions if exit(0)],
    [actions if exit(1)],
    AS_IF([test "x$CROSSCTEST00" = xyes],
        [same actions if exit(0)],
        [dnl same actions if exit(1)]))

......它也不起作用。我在这里错过了什么吗?您是否认为有更好的方法来修补configure.in以启用交叉编译?

1 个答案:

答案 0 :(得分:1)

在AC_INIT之前写入的configure.acconfigure.in中的行不会进入配置脚本。 (查看生成的配置脚本以查看您的分配是否已完成。)您可以将分配移至AC_INIT调用之后。但是对AC_INIT的调用非常过时,使用这样一个过时的调用时需要autoconf 2.66似乎很奇怪。 (名称configure.in也非常老式)。您可能想要考虑浏览文件并寻找过时的版本,因为它可能需要彻底检查。 (并且肯定重命名文件configure.ac