【51CTO.com独家稿件】make是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。
本文分为上下两部分,我们在上一篇文章中分别介绍了make和makefile的一些基本用法,在本文中,我们会对make和makefile的功能做进一步的介绍。
一、构建多个目标
有时候,我们想要在一个makefile中生成多个单独的目标文件,或者将多个命令放在一起,比如,在下面的示例mymakefile3中我们将添加一个clean 选项来清除不需要的目标文件,然后用install选项将生成的应用程序移动到另一个目录中去。这个makefile跟前面的mymakefile较为相似,不同之处笔者用黑体加以标识:
|
all: main |
在这个makefile中需要注意的是,虽然这里有一个特殊的目标all,但是最终还是将main作为目标。因此,如果执行make命令时没有在命令行中给出一个特定目标的话,仍然会编译连接main程序。
其次要注意后面的两个目标:clean和install。目标clean没有依赖模块,因为没有时间标记可供比较,所以它总被执行;它的实际意图是引出后面的rm命令来删除某些目标文件。我们看到rm命令以-开头,这时即使表示make将忽略命令结果,所以即使没有目标供rm命令删除而返回错误时,make clean依然继续向下执行。
接下来的目标install依赖于main,所以make知道必须在执行安装命令前先建立main。用于安装的指令由一些shell命令组成。
因为make调用shell来执行规则,并且为每条规则生成一个新的shell,所以要用一个shell来执行这些命令的话,必须添加反斜杠,以使所有命令位于同一个逻辑行上。这条命令用@开头,表示在执行规则前不会向标准输出打印命令。
为了安装应用程序,目标install会一条接一条地执行若干命令,并且执行下一个之前,不会检查上一条命令是否成功。若想只有当前面的命令取得成功时,随后的命令才得以执行的话,可以在命令中加入&&,如下所示:
| @if [ -d $(INSTDIR) ]; \ then \ cp main $(INSTDIR) &&\ chmod a+x $(INSTDIR)/main && \ chmod og-w $(INSTDIR/main && \ echo “Installed in $(INSTDIR)“ ;\ else \ echo “Sorry, $(INSTDIR) does not exist” ; false ; \ fi |
这是shell的“与”指令,只有当在前的命令成功时随后的命令才被执行。这里不必关心前面命令是否取得成功,只需注意这种用法就可以了。
要想在/usr /local/bin目录安装新命令必须具有特权,所以调用make install命令之前,可以让Makefile使用一个不同的安装目录,或者修改该目录的权限,或切换到root用户。如下所示:
|
$ rm *.o main $ make -f Mymakefile3 $ make -f Mymakefile3 $ rm main $ make -f Mymakefile3 install $ make -f Mymakefile3 clean |
让我们对此作一简单介绍,首先删除main和所有目标文件程序,由于将all作为目标,所以make命令会重新编译main。当我们再次执行make命令时,由于main是最新的,所以make什么也不做。之后,我们删除main程序文件,并执行make install,这会重新建立二进制文件main并将其复制到安装目录。最后,运行make clean命令,来删去所有目标程序。
| 共6页: 1 [2] [3] [4] [5] [6] 下一页 | ||||||||
|
|
||||
| · Windows Server 2008专.. · LAMP技术精解 · AMD Phenom三核处理器.. · 充电计划之热门IT认证.. · 勇闯IT培训黑色围城 · 如何有效防御SQL注入攻.. · 2008年上半年全国软考.. · 选择适合自己的IT认证 |
· IPv6协议--拓展网络无.. · 了解统一威胁管理(UTM).. · 调查:十大发现 解秘技.. · 技术人求职简历完备手册 · Vista SP1对决XP SP3 · 运营商封堵ADSL共享 中.. · PHP开发应用手册 · 解析35岁技术人的价值.. |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 |
· Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. |
|||
|
||||
| · iSCSI应用与发展 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 · Apache技术专题 |
· RAID——磁盘阵列基础 · 企业数据恢复指南 · 路由器设置与口令恢复 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 |
|||