diff --git a/source/archives.rst b/source/archives.rst index 149a681..9c9e19e 100644 --- a/source/archives.rst +++ b/source/archives.rst @@ -4,37 +4,28 @@ 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令 ``ar`` 来完成打包工作。 函数库文件的成员 - ---------------- -一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:: +一个函数库文件由多个文件组成。你可以用如下格式指定函数库文件及其组成:: archive(member) -这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了 ``ar`` 命令来服务的。如: - -.. code-block:: makefile +这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了 ``ar`` 命令来服务的。如:: foolib(hack.o) : hack.o ar cr foolib hack.o -如果要指定多个member,那就以空格分开,如: +如果要指定多个member,那就以空格分开,如:: -.. code-block:: makefile + foolib(hack.o kludge.o) - foolib(hack.o kludge.o) +其等价于:: -其等价于: + foolib(hack.o) foolib(kludge.o) -.. code-block:: makefile +你还可以使用Shell的文件通配符来定义,如:: - foolib(hack.o) foolib(kludge.o) - -你还可以使用Shell的文件通配符来定义,如: - -.. code-block:: makefile - - foolib(*.o) + foolib(*.o) 函数库成员的隐含规则 -------------------- diff --git a/source/conditionals.rst b/source/conditionals.rst index eb148ac..a49efa1 100644 --- a/source/conditionals.rst +++ b/source/conditionals.rst @@ -57,17 +57,13 @@ 语法 ---- -条件表达式的语法为: - -.. code-block:: makefile +条件表达式的语法为:: endif -以及: - -.. code-block:: makefile +以及:: @@ -87,9 +83,7 @@ ifeq "" '' ifeq '' "" -比较参数 ``arg1`` 和 ``arg2`` 的值是否相同。当然,参数中我们还可以使用make的函数。如: - -.. code-block:: makefile +比较参数 ``arg1`` 和 ``arg2`` 的值是否相同。当然,参数中我们还可以使用make的函数。如:: ifeq ($(strip $(foo)),) diff --git a/source/functions.rst b/source/functions.rst index 4febfc7..b0af4c4 100644 --- a/source/functions.rst +++ b/source/functions.rst @@ -12,9 +12,7 @@ $( ) -或是 - -.. code-block:: makefile +或是:: ${ } diff --git a/source/recipes.rst b/source/recipes.rst index 2ebbcc6..49f2512 100644 --- a/source/recipes.rst +++ b/source/recipes.rst @@ -86,15 +86,11 @@ make一般是使用环境变量SHELL中所定义的系统Shell来执行命令, 我们把这个Makefile叫做“总控Makefile”,总控Makefile的变量可以传递到下级的Makefile中(如果你显示的声明),但是不会覆盖下层的Makefile中所定义的变量,除非指定了 ``-e`` 参数。 -如果你要传递变量到下级Makefile中,那么你可以使用这样的声明: - -.. code-block:: makefile +如果你要传递变量到下级Makefile中,那么你可以使用这样的声明:: export ; -如果你不想让某些变量传递到下级Makefile中,那么你可以这样声明: - -.. code-block:: makefile +如果你不想让某些变量传递到下级Makefile中,那么你可以这样声明:: unexport ; @@ -165,9 +161,7 @@ make一般是使用环境变量SHELL中所定义的系统Shell来执行命令, 定义命令包 ---------- -如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以 ``define`` 开始,以 ``endef`` 结束,如: - -.. code-block:: makefile +如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以 ``define`` 开始,以 ``endef`` 结束,如:: define run-yacc yacc $(firstword $^) diff --git a/source/rules.rst b/source/rules.rst index 1b06735..28ea602 100644 --- a/source/rules.rst +++ b/source/rules.rst @@ -7,7 +7,6 @@ 好了,还是让我们来看一看如何书写规则。 - 规则举例 -------- @@ -100,11 +99,9 @@ prerequisites也就是目标所依赖的文件(或依赖目标)。如果其 objects := $(wildcard *.c) -#. 列出(1)中所有文件对应的 ``.o`` 文件,在(3)中我们可以看到它是由make自动编译出的。 +#. 列出(1)中所有文件对应的 ``.o`` 文件,在(3)中我们可以看到它是由make自动编译出的:: - .. code-block:: makefile - - $(patsubst %.c,%.o,$(wildcard *.c)) + $(patsubst %.c,%.o,$(wildcard *.c)) #. 由(1)(2)两步,可写出编译并链接所有 ``.c`` 和 ``.o`` 文件 @@ -312,9 +309,7 @@ $(filter %.o,$(files))表示调用Makefile的filter函数,过滤“$files” main.o : main.c defs.h -但是,如果是一个比较大型的工程,你必需清楚哪些C文件包含了哪些头文件,并且,你在加入或删除头文件时,也需要小心地修改Makefile,这是一个很没有维护性的工作。为了避免这种繁重而又容易出错的事情,我们可以使用C/C++编译的一个功能。大多数的C/C++编译器都支持一个“-M”的选项,即自动找寻源文件中包含的头文件,并生成一个依赖关系。例如,如果我们执行下面的命令: - -.. code-block:: makefile +但是,如果是一个比较大型的工程,你必需清楚哪些C文件包含了哪些头文件,并且,你在加入或删除头文件时,也需要小心地修改Makefile,这是一个很没有维护性的工作。为了避免这种繁重而又容易出错的事情,我们可以使用C/C++编译的一个功能。大多数的C/C++编译器都支持一个“-M”的选项,即自动找寻源文件中包含的头文件,并生成一个依赖关系。例如,如果我们执行下面的命令:: cc -M main.c diff --git a/source/variables.rst b/source/variables.rst index a124b0f..e8612a2 100644 --- a/source/variables.rst +++ b/source/variables.rst @@ -254,9 +254,7 @@ dir这个变量的值是“/foo/bar”,后面还跟了4个空格,如果我 这个示例中,如果定义了“do_sort”,那么: ``foo := $(sort a d b g q c)`` ,于是 ``$(foo)`` 的值就是 “a b c d g q”,而如果没有定义“do_sort”,那么: ``foo := $(strip a d b g q c)`` ,调用的就是strip函数。 -当然,“把变量的值再当成变量”这种技术,同样可以用在操作符的左边: - -.. code-block:: makefile +当然,“把变量的值再当成变量”这种技术,同样可以用在操作符的左边:: dir = foo $(dir)_sources := $(wildcard $(dir)/*.c) @@ -313,23 +311,17 @@ dir这个变量的值是“/foo/bar”,后面还跟了4个空格,如果我 override 指示符 --------------- -如果有变量是通常make的命令行参数设置的,那么Makefile中对这个变量的赋值会被忽略。如果你想在Makefile中设置这类参数的值,那么,你可以使用“override”指示符。其语法是: - -.. code-block:: makefile +如果有变量是通常make的命令行参数设置的,那么Makefile中对这个变量的赋值会被忽略。如果你想在Makefile中设置这类参数的值,那么,你可以使用“override”指示符。其语法是:: override ; = ; override ; := ; -当然,你还可以追加: - -.. code-block:: makefile +当然,你还可以追加:: override ; += ; -对于多行的变量定义,我们用define指示符,在define指示符前,也同样可以使用override指示符,如: - -.. code-block:: makefile +对于多行的变量定义,我们用define指示符,在define指示符前,也同样可以使用override指示符,如:: override define foo bar @@ -342,9 +334,7 @@ override 指示符 define指示符后面跟的是变量的名字,而重起一行定义变量的值,定义是以endef 关键字结束。其工作方式和“=”操作符一样。变量的值可以包含函数、命令、文字,或是其它变量。因为命令需要以[Tab]键开头,所以如果你用define定义的命令变量中没有以 ``Tab`` 键开头,那么make 就不会把其认为是命令。 -下面的这个示例展示了define的用法: - -.. code-block:: makefile +下面的这个示例展示了define的用法:: define two-lines echo foo