天下

记录修行的印记

简单Makefile的编写

指定目标

all
这个伪目标是所有目标的目标,其功能一般是编译所有的目标。

clean
这个伪目标功能是删除所有被make创建的文件。

install
这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去。

print
这个伪目标的功能是例出改变过的源文件。

tar
这个伪目标功能是把源程序打包备份。也就是一个tar文件。

dist
这个伪目标功能是创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。

TAGS
这个伪目标功能是更新所有的目标,以备完整地重编译使用。

check和test
这两个伪目标一般用来测试makefile的流程。


自动化变量

$@
表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,$@就是匹配于目标中模式定义的集合。

$^
所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

$?
所有比目标新的依赖目标的集合。以空格分隔。

$+
这个变量很像$^,也是所有依赖目标的集合。只是它不去除重复的依赖目标。

$%
当规划的目标文件是库文件时,$%表示规则中的目标成员名。
例如,如果一个目标是foo.a(bar.o),那么,$%就是bar.o,$@就是foo.a。
如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么其值为空。

$<
依赖目标中的第一个目标名字。如果依赖目标是以模式(即%)定义的,那么$<将是符合模式的一系列的文件集。注意,其是一个一个取出来的。


例子:

CCLD    = g++ -Wall --o
CC    
= g++ -Wall -
OBJS 
= SocketServer.o
TARGETS 
= 0928

.PHONY:all
all
:$(TARGETS)


SocketServer
.o:SocketServer.cpp
    $(CC) $
^
    
0928:$(OBJS) main.cpp
    $(CCLD) $@ $
^
    
@echo make success
    
.PHONY:clean
clean
:
    
#rm -rf ${OBJS}
    rm -rf *.o
    rm 
-rf $(TARGETS)

posted on 2011-10-12 17:01 天下 阅读(996) 评论(0)  编辑 收藏 引用 所属分类: Linux编程Linux Shell


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论