用 makefile 向 make 描述代码
所有目标、依赖项和生成方法的细节信息需要保存在一个叫 makefile 或 Makefile 的文件中,为了弄明白它是怎么工作的,下面假设要用一对源文件创建
launch 程序:
launch 程序由 launch.o 和 thruster.o 文件链接而成,这两个文件又是由相应的 C 文件和头文件编译而成,launch.o 文件还依赖 thruster.h 文件,因为 thruster.c 需要调用 thruster.h 中的函数。
你将在 makefile 中这样描述构建过程:
生成方法都必须以 tab 开头。如果尝试用空格缩进,就无法生成程序。
试驾
将 make 规则保存在当前目录下一个叫 Makefile 的文本文件中,然后打开控制台,输入以下命令:
可以看到 make 为了创建 launch 程序执行了一连串的命令。但如果修改了 thruster.c 文件,再运行一次 make ,会发生什么呢?
make 会跳过创建新的 launch.o 这一步,只编译 thruster.o,然后重新链接程序。这里没有蠢问题问:make 很像 ant ?答:应该说 ant 和 rake 这样的构建工具像 1make 才对,make 是最早出现的用来从源代码自动构建程序的工具。1 ant 和 rake 分别是基于 Java 和 Ruby 的构建工具。——译者注问:编译源代码要做那么多事情,make 真的那么管用吗?答:是的,make 非常有用。对小项目来说,make 可能节约不了太多时间,但一旦有很多文件,手动编译、链接它们会很痛苦。问:如果我在 Windows 上写了一个 makefile,在 Mac 或 Linux 上能用吗?答:makefile 会调用底层操作系统的命令,所以有时不能在其他操作系统中使用。问:除了编译代码,我能用 make 做其他事情吗?答:可以,虽然 make 一般用来编译代码,但你也可以用它充当命令行下的安装程序或源代码控制工具。事实上,任何可以在命令行中执行的任务,你都可以用 make 来做。
古墓谜案
为什么要用 tab 缩进?用空格缩进“生成方法”比用 tab 缩进方便多了,那么为什么 make 规定必须使用 tab 呢?这个嘛,make 之父 Stuart Feldman 曾说过:“为什么要在第一列中使用 tab?……程序正确运行了,于是就保留了下来。几个星期以后,make 拥有了几个用户,大部分是我的朋友,我又不愿破坏代码的基本结构。很遗憾,后来的事情你都知道了。”
百宝箱
make 减轻了编译文件时的痛苦,但如果你觉得它还不够自动化,可以试一试这个叫 autoconf 的工具: http://www.gnu.org/software/autoconf/ autoconf 可以用来生成 makefile。C 程序员经常创造工具来自动化软件开发,这类工具在 GNU 网站上的数量越来越多。
make 冰箱贴
嘿,宝贝,如果你跟不上节奏,一定会爱上 Head First 酒吧的人写的这个程序!oggswing 程序读取 Ogg 格式的音乐文件,然后创建一首摇摆乐。宝贝!看看你能否完成 makefile,它先编译 oggswing ,然后用它来转换.ogg 文件。
make 冰箱贴解答
嘿,宝贝,如果你跟不上节奏,一定会爱上 Head First 酒吧的人写的这个程序!oggswing 程序读取 Ogg 格式的音乐文件,然后创建一首摇摆乐。宝贝!你将完成 makefile,它先编译 oggswing ,然后用它来转换.ogg 文件。
百宝箱
make 可以做得更多,但是我们没有空间在这里讨论。关于 make 的更多信息和功能,请浏览 GNU Make Manual: http://tinyurl.com/yczmjx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论