make是?词性hhhhhhhhhhhhhhhhh补充一下make的用法

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 02:16:43
make是?词性hhhhhhhhhhhhhhhhh补充一下make的用法

make是?词性hhhhhhhhhhhhhhhhh补充一下make的用法
make是?词性
hhhhhhhhhhhhhhhhh
补充一下make的用法

make是?词性hhhhhhhhhhhhhhhhh补充一下make的用法
make [meik]
v. 做,制造,使
n. 牌子,型号, 制造, 构造, 性情
[医] 通, 关(电路)

动词

v.动词verb
making the sth.

make英[meik]  美[mek]

  • vt. 使得;进行;布置,准备,整理;制造;认为;获得;形成;安排;引起;构成
  • vi. 开始;前进;增大;被制造
  • n. 制造;构造;性情

动词 。

什么是 make?
当你写一个简单的程序,只有一到两个源文件的时候,输入
% cc file1.c file2.c
就没什么问题,但如果有很多源文件就会很烦人——编译的时间也会很长。
一个方法就是使用目标文件,只在源文件有改变的情况下才重新编译源文件。因此你可以这样做:
% cc file1.o file2.o ... file37.c ...

全部展开

什么是 make?
当你写一个简单的程序,只有一到两个源文件的时候,输入
% cc file1.c file2.c
就没什么问题,但如果有很多源文件就会很烦人——编译的时间也会很长。
一个方法就是使用目标文件,只在源文件有改变的情况下才重新编译源文件。因此你可以这样做:
% cc file1.o file2.o ... file37.c ...
上次编译后,file37.c 发生了改变,但其他文件没有。这样做可以让编译过程快很多,但是也不能解决累人的输入问题。
或者我们可以使用一个 shell script 来解决输入问题,但是也需要重新编译所有文件,在大型项目上很没有效率。
如果有成百上千的源文件的话怎么办?如果我们在与很多人合作写程序,别人对源文件进行了修改,又没有告诉你,该怎么办?
也许我们可以把以上两种方法结合,写一种像 shell script 一样的东西。这种文件包含某种技巧可以决定什么时候该对源文件进行编译。现在所有我们要的就是一个程序可以懂得这种技巧,因为要懂得这种技巧,shell 还没那么大的能耐。
这个程序就叫 make。它读入一个文件,叫 makefile,这个文件决定了源文件之间的依赖关系。而且决定了源文件什么时候该编译什么时候不应该编译。例如,某个规则可以说 “ 如果 fromboz.o 比 fromboz.c 要旧,意思就是有人修改了 fromboz.c,因此我们需要重新编译这个文件。”这个 makefile 还有规则通知 make 该 怎么 重新编译源文件,因此 make 是一个强大得多的工具。
makefile 通常和相关的源文件保存在同一个目录下,可以叫做 makefile,Makefile 或者 MAKEFILE。大多数程序员会使用 Makefile 这个名字,因为这样可以让这个文件被放在目录列 表的顶端,可以很容易得看见。
使用 make 的例子
这是一个非常简单的 make 文件:
foo: foo.c
cc -o foo foo.c
包含两行,一行是依赖关系,一行是执行动作。
依赖关系的那一行包含了程序的名字 (叫做 target),紧跟着一个冒号,然后是空格,最后是源文件的 名字。当 make读入这一行的时候,会检查 foo 是否存在;如果存在,就比较 foo 和 foo.c 最后的修改时间有什 么不同。如果 foo 不存在,或者比 foo.c 要旧,就检查执行动作那一行看看该怎么做。换句话 说,就是 foo.c 需要重新编译的时候该怎么办。
执行动作那一行以一个 tab (按下 tab) 开始,然后是你在命令行下产生 foo 所执行的命令。如果 foo 过期了,或者不存在,make 就会 执行这个命令来产生 foo。换句话说,这就是重新编译 foo.c 的规则。
因此,当你输入 make 时,它会确定 foo 和 foo.c 在修改时间上是否同步。这个原则可以在 Makefile 里扩展到成百上千的目标文件上——实际上,在 FreeBSD 里,你只要在合适的目录下输入 make world 就可以编译整个操作系统!
makefile 另一个有用的特点就是目标文件不一定就是程序。例如,我们可以 有这样的 make 文件。
foo: foo.c
cc -o foo foo.c
install:
cp foo /home/me
我们可以输入如下的命令告诉 make 该执行哪个目标:
% make target
make 会只执行这个目标而忽略其他的目标。例如,如果我们输入 make foo,就只有 foo 被执行,必要的情况下重新编译 foo 而不会继续执行 install 这个目标。
如果我们只是输入 make 这个命令,make 总会寻找第一个目标,并且在执行完以后就不管其他的目标了。例如,如果我们输入 make foo,make 就会转到 foo 这个目标,在必要的情况下重新编译 foo,而不会执行 install 目标, 然后就停止了。
一定要注意,install 这个目标不依赖任何其他的东西!这意味着我们一旦输入 make install,这个目标下的所有命令都将被执行。这种情况下,foo 将被安装到用户的家目录下。应用程序的 makefile 正是这样写的,以便程序在正确编译后可以被安装到正确的目录。
要尝试解释的话会比较容易让人混淆。如果你不太懂 make 是如何工作的,最好的办法就是先写一个简单的程序例如 “hello world” 以及和上面的例子相同的 make 文件再去实验。然后 再进一步,使用多个源文件,或者让你的源文件包含一个头文件。 touch 命令在这里就非常有用了——它能让在不改变文件内容的情况下改变文件的日期。
Make 和 include-文件
C 源码的开头经常有一系列被包含的头文件,例如 stdio.h。有一些是系统级的头文件,有一些是你正在写的项目的头文件:
#include
#include "foo.h"
int main(....
要确定在你的 foo.h 被改变之后,这个文件也会被重新编译,就要在你的 Makefile 这样写:
foo: foo.c foo.h
当你的项目变得越来越大,你自己的头文件越来越多的时候,要追踪所有这些头文件和所有依赖它的文件会是一件痛苦的事情。如果你改变了其中一个头文件,却忘了重新编译所有依赖它的源文件,结果会是很失望的。gcc 有一个选项可以分析你的源文件然后产生一个头文件的列表和它的依赖关系: -MM。
如果你把下面的内容加到你的 Makefile 里面:
depend:
gcc -E -MM *.c > .depend
然后运行 make depend,就会产生一个 .depend,里面包含了目标文件,C 文件和头文件的列表:
foo.o: foo.c foo.h
如果你改变了 foo.h,下一次运行 make 的时候,所有依赖 foo.h 的文件就会被重新编译。
每一次你增加一个头文件的时候,别忘了运行一次 make depend。
有关与“make”的词组
1.make up to sb 讨好、巴结某人
2.make up for sth in/with 弥补
3.make towards sth 移动,移向
4.make sth of sb/sth 了解、理解
5.make sb/sth into sth 将......制成(变成)
6.make out 听出,看出,辨认出
7.make off 溜掉,匆忙离开
8.make off with sth 抢走,拿走(他人之物)
9.make for sth 朝......走去,朝......前进
10.make away with sb/sth 偷窃(某物)
11.make the most of 充分利用
12.make a go of sth 尽力以使某事成功
13.make too much of 过分重视
14.make a day/night/evening of it 花整天/整夜/整个晚上的时间做某事
15.make out a cheque/bill etc 开支票/帐单等
16.make sb out to be sth 假称,把......说成
17.make out a case (for) 找到充分的理由证明(解释)
18.be made for each other 有利于,倾向于

收起