Skip to content

Commit 6379673

Browse files
committed
每行不超过80列以保证 diff 的显示
1 parent c902612 commit 6379673

11 files changed

+931
-332
lines changed

Diff for: source/archives.rst

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
使用make更新函数库文件
22
======================
33

4-
函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令 ``ar`` 来完成打包工作。
4+
函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由
5+
命令 ``ar`` 来完成打包工作。
56

67
函数库文件的成员
78
----------------
@@ -10,7 +11,8 @@
1011

1112
archive(member)
1213

13-
这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了 ``ar`` 命令来服务的。如::
14+
这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了
15+
``ar`` 命令来服务的。如::
1416

1517
foolib(hack.o) : hack.o
1618
ar cr foolib hack.o
@@ -30,13 +32,18 @@
3032
函数库成员的隐含规则
3133
--------------------
3234

33-
当make搜索一个目标的隐含规则时,一个特殊的特性是,如果这个目标是 ``a(m)`` 形式的,其会把目标变成 ``(m)`` 。于是,如果我们的成员是 ``%.o`` 的模式定义,并且如果我们使用 ``make foo.a(bar.o)`` 的形式调用Makefile时,隐含规则会去找 ``bar.o`` 的规则,如果没有定义 `bar.o`` 的规则,那么内建隐含规则生效,make会去找 ``bar.c`` 文件来生成 ``bar`` .o,如果找得到的话,make执行的命令大致如下::
35+
当make搜索一个目标的隐含规则时,一个特殊的特性是,如果这个目标是 ``a(m)`` 形式
36+
的,其会把目标变成 ``(m)`` 。于是,如果我们的成员是 ``%.o`` 的模式定义,并且如果
37+
我们使用 ``make foo.a(bar.o)`` 的形式调用Makefile时,隐含规则会去找 ``bar.o`` 的
38+
规则,如果没有定义 ``bar.o`` 的规则,那么内建隐含规则生效,make会去找 ``bar.c``
39+
文件来生成 ``bar.o`` ,如果找得到的话,make执行的命令大致如下::
3440

3541
cc -c bar.c -o bar.o
3642
ar r foo.a bar.o
3743
rm -f bar.o
3844

39-
还有一个变量要注意的是 ``$%`` ,这是专属函数库文件的自动化变量,有关其说明请参见“自动化变量”一节。
45+
还有一个变量要注意的是 ``$%`` ,这是专属函数库文件的自动化变量,有关其说明请参
46+
见“自动化变量”一节。
4047

4148
函数库文件的后缀规则
4249
--------------------
@@ -63,6 +70,8 @@
6370
注意事项
6471
--------
6572

66-
在进行函数库打包文件生成时,请小心使用make的并行机制( ``-j`` 参数)。如果多个 ``ar`` 命令在同一时间运行在同一个函数库打包文件上,就很有可以损坏这个函数库文件。所以,在make未来的版本中,应该提供一种机制来避免并行操作发生在函数打包文件上。
73+
在进行函数库打包文件生成时,请小心使用make的并行机制( ``-j`` 参数)。如果多个
74+
``ar`` 命令在同一时间运行在同一个函数库打包文件上,就很有可以损坏这个函数库文件
75+
。所以,在make未来的版本中,应该提供一种机制来避免并行操作发生在函数打包文件上。
6776

6877
但就目前而言,你还是应该不要尽量不要使用 ``-j`` 参数。

Diff for: source/conditionals.rst

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
使用条件判断
22
============
33

4-
使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。
4+
使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,
5+
或是比较变量和常量的值。
56

67
示例
78
----
@@ -20,9 +21,13 @@
2021
$(CC) -o foo $(objects) $(normal_libs)
2122
endif
2223
23-
可见,在上面示例的这个规则中,目标 ``foo`` 可以根据变量 ``$(CC)`` 值来选取不同的函数库来编译程序。
24+
可见,在上面示例的这个规则中,目标 ``foo`` 可以根据变量 ``$(CC)`` 值来选取不同的函数库来
25+
编译程序。
2426

25-
我们可以从上面的示例中看到三个关键字: ``ifeq`` 、 ``else`` 和 ``endif`` 。 ``ifeq`` 的意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括起。 ``else`` 表示条件表达式为假的情况。 ``endif`` 表示一个条件语句的结束,任何一个条件表达式都应该以 ``endif`` 结束。
27+
我们可以从上面的示例中看到三个关键字: ``ifeq`` 、 ``else`` 和 ``endif`` 。 ``ifeq`` 的
28+
意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括
29+
起。 ``else`` 表示条件表达式为假的情况。 ``endif`` 表示一个条件语句的结束,任何一个条件表达
30+
式都应该以 ``endif`` 结束。
2631

2732
当我们的变量 ``$(CC)`` 值是 ``gcc`` 时,目标 ``foo`` 的规则是:
2833

@@ -89,7 +94,8 @@
8994
<text-if-empty>
9095
endif
9196

92-
这个示例中使用了 ``strip`` 函数,如果这个函数的返回值是空(Empty),那么 ``<text-if-empty>`` 就生效。
97+
这个示例中使用了 ``strip`` 函数,如果这个函数的返回值是空(Empty),那么
98+
``<text-if-empty>`` 就生效。
9399

94100
第二个条件关键字是 ``ifneq`` 。语法是:
95101

@@ -109,7 +115,9 @@
109115
110116
ifdef <variable-name>
111117
112-
如果变量 ``<variable-name>`` 的值非空,那到表达式为真。否则,表达式为假。当然, ``<variable-name>`` 同样可以是一个函数的返回值。注意, ``ifdef`` 只是测试一个变量是否有值,其并不会把变量扩展到当前位置。还是来看两个例子:
118+
如果变量 ``<variable-name>`` 的值非空,那到表达式为真。否则,表达式为假。当然,
119+
``<variable-name>`` 同样可以是一个函数的返回值。注意, ``ifdef`` 只是测试一个变量
120+
是否有值,其并不会把变量扩展到当前位置。还是来看两个例子:
113121

114122
示例一:
115123

@@ -142,10 +150,13 @@
142150
143151
ifndef <variable-name>
144152
145-
这个我就不多说了,和 `ifdef`` 是相反的意思。
153+
这个我就不多说了,和 ``ifdef`` 是相反的意思。
146154

147-
在 ``<conditional-directive>`` 这一行上,多余的空格是被允许的,但是不能以 ``Tab`` 键做为开始(不然就被认为是命令)。而注释符 ``#`` 同样也是安全的。 ``else`` 和 ``endif`` 也一样,只要不是以 ``Tab`` 键开始就行了。
155+
在 ``<conditional-directive>`` 这一行上,多余的空格是被允许的,但是不能以 ``Tab`` 键
156+
作为开始(不然就被认为是命令)。而注释符 ``#`` 同样也是安全的。 ``else`` 和 ``endif``
157+
也一样,只要不是以 ``Tab`` 键开始就行了。
148158

149-
特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,所以,你最好不要把自动化变量(如 ``$@`` 等)放入条件表达式中,因为自动化变量是在运行时才有的。
159+
特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,
160+
所以,你最好不要把自动化变量(如 ``$@`` 等)放入条件表达式中,因为自动化变量是在运行时才有的。
150161

151162
而且为了避免混乱,make不允许把整个条件语句分成两部分放在不同的文件中。

0 commit comments

Comments
 (0)