来自当知百科
跳转到: 导航搜索

目录

程序

  什么是 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 这个目标不依赖任何其他的东西!这意味着我们一旦输入 makeinstall,这个目标下的所有命令都将被执行。这种情况下,foo 将被安装到用户的家目录下。应用程序的 makefile正是这样写的,以便程序在正确编译后可以被安装到正确的目录。

  要尝试解释的话会比较容易让人混淆。如果你不太懂 make 是如何工作的,最好的办法就是先写一个简单的程序例如 “helloworld” 以及和上面的例子相同的 make 文件再去实验。然后 再进一步,使用多个源文件,或者让你的源文件包含一个头文件。touch 命令在这里就非常有用了──它能让在不改变文件内容的情况下改变文件的日期。

Make 和 include-文件

  C 源码的开头经常有一系列被包含的头文件,例如 stdio.h。有一些是系统级的头文件,有一些是你正在写的项目的头文件:

  #include <stdio.h>

  #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) 找到充分的理由证明(解释)

  20.make sb. doing sth. 让某人一直做某事

  21.make sth. done 指让别人帮助完成某事

美国传统词典

  make

  make

  AHD:[m&sup3;k]

  D.J.[me!k]

  K.K.[mek]

  v.(动词)

  made[m&sup3;d] mak.ing,makes

  (1)

  To cause to exist or happen; bring about; create:

  使存在,使发生:导致存在或发生;使发生;创造:

  made problems for him; making a commotion.

  为他制造问题;引发暴乱

  (2)

  To bring into existence by shaping, modifying, or puttingtogether material; construct:

  制成:用塑造、修改或把材料放在一块的方法导致存在;建造:

  make a dress; made a wall of stones.

  做衣服;砌石墙

  (3)

  To form by assembling individuals or constituents:

  集成:把个体或成份组合而形成:

  make a quorum.

  达到法定人数

  (4)

  To change from one form or function to another:

  使功能改变:把一种形式或功能转换成另外一种:

  make clay into bricks.

  把泥土制成砖块

  (5)

  To cause to be or become:

  使成或变成:

  made her position clear; a decision that made him happy.

  使她的地位明朗化;此决定令他高兴

  (6)

  To cause to assume a specified function or role:

  当做,当成:使具有一种特定的功能或成为某个角色:

  made her treasurer; made Chicago his home.

  视她为出纳员;把芝加哥当成他的家

  (7)

  To cause to act in a specified manner:

  造成,导致:以特定的方式引起行动:

  Heat makes gases expand.

  热使得气体膨胀

  (8)

  To compel:

  促使:

  made him leave.

  迫使他离开

  (9)

  To form in the mind:

  在头脑中形成:

  make an estimate.

  做估算

  (10)

  To compose:

  创作:

  make verses.

  创作诗歌

  (11)

  To prepare; fix:

  准备;安排:

  make breakfast.

  准备早餐

  (12)

  To get ready or set in order for use:

  准备使用:准备或料理好以便使用:

  made the bed.

  整理床铺

  (13)

  To gather and light the materials for (a fire).

  生火:收集材料并点燃(生火)

  (14)

  To engage in:

  从事:

  make war.

  开战

  (15)

  To carry out; perform:

  执行;进行:

  make a telephone call; make an incision.

  打电话;切开

  (16)

  To achieve, produce, or attain:

  实现,产生,达到:

  made peace between the two factions; not making sense; didn'tmake the quota.

  在两个派别之间实现和平;毫无意义;没有达到定额

  (17)

  To institute or establish; enact:

  制订:制定或者建立;颁布:

  make laws.

  制定法律

  (18)

  To draw up and execute in a suitable form:

  订立:以合适的形式拟定并实施:

  make a will.

  立遗嘱

  (19)

  To arrive at; reach:

  到达;抵达:

  made Washington in two hours.

  在两小时内到达华盛顿

  (20)

  To reach in time:

  及时赶上:

  just made the plane.

  刚好赶上飞机

  (21)

  To attain the rank or position of:

  达到地位:达到某种职位或军衔:

  She made lieutenant.

  她的军衔为中尉

  (22)

  To acquire a place in or on:

  组成,得到:获得一个位置:

  made the basketball team; made the morning papers.

  组成篮球队;收到早报了

  (23)

  To gain or earn, as by working:

  赚到:通过工作赚得或获得:

  make money.

  赚钱

  (24)

  To behave so as to acquire:

  使成为:为了获取而做某些行为:

  make friends.

  交朋友

  (25)

  To score or achieve, as in a sport:

  得分:在体育比赛中得分或成功:

  made a field goal.

  射门得分

  (26)

  To assure the success of:

  确保…的成功:

  A favorable review from him can make a play.

  他赞赏的评论能使这场戏成功

  (27)

  To favor the development of:

  有利于…的发展:

  Practice makes a winning team.

  勤加训练必有助于球队获得胜利

  (28)

  To be suited for:

  对…合适:

  Oak makes strong furniture.

  橡木合适做耐用家具

  (29)

  To develop into:

  发展成为:

  She will make a fine doctor.

  她将会成为一个好医生

  (30)

  To draw a conclusion as to the significance or nature of:

  下结论:作出对…的意义或本性的结论:

  don't know what to make of the decision.

  不知道怎样作决定

  (31)

  To calculate as being; estimate:

  估计是;估算:

  I make the height 20 feet.

  我估计有20英尺高

  (32)

  To consider as being:

  认为是:

  wasn't the problem some people made it.

  有些人不认为这是一个问题

  (33)

  To constitute:

  构成:

  Twenty members make a quorum.

  二十个成员构成法定人数

  (34)

  To add up to:

  等于:

  Two and two make four.

  二加二等于四

  (35)

  To amount to:

  接近,相当于:

  makes no difference.

  没有什么区别

  (36)

  To constitute the essence or nature of:

  架构:构成…的精华或本质:

  Clothes make the man.

  由穿着便可了解一个人

  (37)

  To cause to be especially enjoyable or rewarding:

  使有意义:使成为特别有乐趣或值得的:

  You made my day.

  你使我的生活特别有意义

  (38)

  To appear to begin (an action):

  准备:看上去开始(一个动作):

  She made to leave.

  她准备离开

  (39)

  Slang To persuade to have sexual intercourse.

  【俚语】 性交:说服…发生性关系

  v.intr.(不及物动词)

  (1)

  To act or behave in a specified manner:

  做:明确地做或行为:

  make merry; make free.

  快乐地做;自由地做

  (2)

  To begin or appear to begin an action:

  准备做:开始或看上去开始一个动作:

  made as if to shake my hand.

  好象要和我握手

  (3)

  To cause something to be as specified:

  确认:使某事物变得明确:

  make ready; make sure.

  准备好;确认

  (4)

  To proceed in a certain direction:

  按某一方向前进:

  made for home; made after the thief.

  回家;追赶小偷

  (5)

  Slang To pretend to be; imitate. Used withlike :

  【俚语】 假扮;模仿。与like 连用:

  made like a ballerina.

  模仿芭蕾舞女演员

  (6)

  To undergo fabrication or manufacture:

  生产:经编写或生产成为:

  This wool makes up into a warm shawl.

  这种羊毛织成了很暖和的围巾

  (7)

  To rise or accumulate:

  上升或积聚:

  The tide is making.

  正在涨潮

  n.(名词)

  (1)

  The act or process of making; manufacturing.

  制造:制作或生产的动作或过程;生产

  (2)

  The style or manner in which a thing is made:

  制作样式:生产某事物的风格或方式:

  disliked the make of her coat.

  不喜欢她衣服的样式

  (3)

  The amount produced, especially the output of a factory.

  生产量:生产的数量,特别是一座工厂的产量

  (4)

  A specific line of manufactured goods, identified by themanufacturer's name or the registered trademark:

  牌子:产品特定的种类,以生产商的名字或者注册的商标来识别:

  a famous make of shirt.

  名牌衬衫

  (5)

  The physical or moral nature of a person; character ordisposition:

  性格:一个人的身体或精神上的本质;性格或者性情:

  found out what make of man he was.

  得知他是一个什么样的人

  (6)

  Slang Identification of a person or thing, often from informationin police records:

  【俚语】 档案:一个人或事物的身份,经常从警方记录的信息中得出:

  Did you get a make on the assailant?

  你得知有关攻击者的资料了吗?

个人工具
名字空间

变换
查看
操作
导航
工具箱