该文件说
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_IF
和test1
shell代码是如何工作的呢?它是在测试一些环境变量吗?谢谢你的解释!
答案 0 :(得分:0)
听起来你没有做太多的shell脚本。否则,除非提供错误的表达式,否则您知道test
实用程序没有可见的输出。
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"
),但不一定需要。