如何理解autoconf中的AS_IF

时间:2013-12-28 20:14:05

标签: autoconf

该文件说

Macro: AS_IF (test1, [run-if-true1], ..., [run-if-false])
     

运行shell代码test1。如果test1以零状态退出,则运行shell代码run-if-true1,否则检查进一步的测试。如果没有测试以零状态退出,则运行shell代码run-if-false,如果run-if-true1或run-if-false为空,则执行简化。

configure.ac文件包含

AS_IF([test "$have_hdf5" != "no"], [AC_DEFINE([HAVE_HDF5], [], [we have HDF5 library + headers])])

但是当我输入run shell code test1,即test "$have_hdf5" != "no"时,什么都没有出现。无论我输入什么(例如test $have_hdf5),我什么都没得到。但它确实适用于我./configure。那么AS_IFtest1 shell代码是如何工作的呢?它是在测试一些环境变量吗?谢谢你的解释!

2 个答案:

答案 0 :(得分:0)

听起来你没有做太多的shell脚本。否则,除非提供错误的表达式,否则您知道test实用程序没有可见的输出。

如果表达式为true且非零退出状态表明表达式为false(或无效),则

test将以0状态退出。

AS_IF测试您提供的表达式的退出状态作为其第一个参数。

如果为0(true),则执行相关的代码块。如果没有,它将继续执行下一个测试表达式并执行相同的行为。

直到宏用完测试才会发生这种情况。一旦发现所有测试都为false,如果提供了最后一个参数,它将执行最后一个参数的内容。

修改

当然,如果你当前的shell中没有定义“have_hdf5”,那么当你单独执行test表达式时就不会这样,但如果在configure脚本中它是真的,它会做这意味着什么。在任何情况下,除非使用输出语句,否则不会发生输出。

答案 1 :(得分:0)

AS_IF M4sh宏将扩展为可移植的Bourne shell if语句(在编写autoconf的过程中由configure处理时),如:< / p>

if test1 ; then run-if-true1 ... else run-if-false fi

内部测试和操作包含在elif ... ; then ...

测试从0开始的每个其他参数。通常这些是某种变量测试(例如test "$have_hdf5" != "no"),但不一定需要。