9.使用M4sh编程

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question

M4sh,称作mash,目的是产生便携式可移植 Bourne shell 脚本。因为不同的shell的语法不兼容,故创造此种宏来解决。

其宏以AS_开头。在shell和环境变量中保留了变量命名空间as_,输出文件中是_AS[A-Z]

9.1 普通的shell结构

AS_IF (test1, [run-if-true1], …, [run-if-false])

如果没有一个测试是成功的,执行run-if-false

AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
        [test "x$foo" != xno], [HANDLE_FOO([maybe])],
        [echo foo not specified])

AS_TR_CPP (expression)

expression转为C的宏定义

# This outputs "#define HAVE_CHAR_P 1".
        # Notice the m4 quoting around #, to prevent an m4 comment
        type="char *"
        echo "[#]define AS_TR_CPP([HAVE_$type]) 1"

9.2 间接变量名的支持

AS_LITERAL_IF (expression, [if-literal], [if-not], [if-simple-ref = ‘if-not’])

AS_LITERAL_WORD_IF (expression, [if-literal], [if-not], [if-simple-ref = ‘if-not’])

expression定义为shell文本,输出if-literal;若expression包含了shell引用或者调用(例如$var或cd),输出if-not

expression为文本的时候,AS_LITERAL_WORD_IF不允许expression含有空格,但是AS_LITERAL_IF可以。

AS_VAR_APPEND (var, text)

相当于var += text,即var=${var}text

AS_VAR_IF (var, [word], [if-equal], [if-not-equal])

输出shell的条件语句。var==word,执行if-equal;否则执行if-not-equal
word必须是单个shell单词。

猜你喜欢

转载自blog.csdn.net/SHRINKSHR/article/details/85837081