zoukankan      html  css  js  c++  java
  • 关于 m4 文本处理引擎

    使用 m4 开源项目还是挺多的,之前看到都有的怕怕的,选择自动略过。今天鼓起勇气来学习一波。

    首先 m4 processor 是一个“宏定义”处理器,也就是说,他是一个纯粹的文本处理器,干些管理模板,使用模板来进行文本替换的活。m4 的应用灰常广泛,只是我们很少关注它的存在罢了。

    为什么你会经常看到 m4 呢?其中一个原因可能是你经常使用 autoconf 管理的代码包。autoconf 使用它来产生配置脚本。

    m4 的另一个用途是代码的自动生成,当然,这样生成的代码,debug 可能会比较麻烦。据说,m4 会让那些狂热的程序员上瘾,使其痴迷于使用 m4 来解决问题。。。好像很可怕。

    手册地址: http://www.gnu.org/software/m4/manual/m4.html

    一个简单例子

    假设我们有一个文件 foo,其内容为 bar,比如

    $ cat foo
    bar

    那么,我们执行下面一句:

    m4 -Dbar=hello foo -Dbar=world foo

    将得到结果:

    $ m4 -Dbar=hello foo -Dbar=world foo
    hello
    world

    这里,我们先后定义了宏 bar=hello 和 bar=world。然后,两次引用文件foo,并对其内容进行替换。所以,我们分别得到了两次的处理结果 hello 和 world。

    我们可以在命令行进行宏定义,同样,也可以在文本中进行宏定义。所以,这个例子的另一个版本如下。

    我们有一个文件,hello.m4,内容如下:

    define(`hello', `Hello, World')
    hello, welcome to m4!

    使用 m4 来执行这个文件:

    m4 hello.m4

    那么,我们得到结果:

    Hello, World, welcome to m4!

    在 hello.m4 中,我们定义了宏 hello=‘Hello, World’,那么,经过 m4 处理后的后一句,hello 就被替换成了 Hello, World!

  • 相关阅读:
    二.线性表
    一.绪论
    托管服务器代码
    jquery easyui DataGrid 数据表格 属性
    用socket 模拟http请求
    struct和class的相同点与不同点
    c++中的基本数据类型
    当函数返回一个局部变量的指针问题,内存是否被释放
    Python首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。(使用字典)
    浅谈结构体字节的求法
  • 原文地址:https://www.cnblogs.com/pied/p/6134151.html
Copyright © 2011-2022 走看看