Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351242
  • 博文数量: 112
  • 博客积分: 5245
  • 博客等级: 大校
  • 技术积分: 1120
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 09:20
个人简介

静下来,定好方向,好好干。

文章分类
文章存档

2017年(1)

2012年(1)

2011年(5)

2010年(6)

2009年(16)

2008年(59)

2007年(24)

我的朋友

分类: LINUX

2007-11-07 16:07:06

make & makefile:


是一个功能强大的项目管理工具.
目标   :   依赖
   规则

两种情况的区别:
1.倒叙方式,最终目标在最前面;后面的目标是否执行都依赖于前面的最终目标是否用到;
2.顺序方式,在同一个目标下,规则中各行依次紧密排列,顺序执行;


make -f makefile_name
make -Iinclude
make -C subdir
make -C subdir -f makefile_name clean
make -s   禁止命令的显示

automake根据我写的Makefile.am来生成Makefile.in,然后执行./configure生成Makefile

shell里面每执行完一条命令,则退回原来的shell中,用分号';'进行分割将在同一个shell中执行

PWD := $(shell pwd)
...$(PWD)    可应用路径

定义命令包:
define myfun
...
undef
$(myfun)   可应用该命令包

foo = ok
ifdef foo    测试foo是否被定义
    b = yes
else          如果foo =      为空走此路
    b = no
endif

+=可追加变量值


.PHONY:clean   会被强制执行,与clean这个文件是否存在无关.
clean :
    rm -rf *.o app

内建变量:   $@   $<   $^所有   $?比目标新的依赖
.c.o:            老写法
    gcc -c $<
%.o:%.c      新写法
    gcc -c $<

通配符:   *   ?   [...]
显示控制:   @echo compiling   有@符号将不显示命令本身

高级变量:
$(var:a=b)   以a字串结尾的a替换成b
如:
foo = a.o b.o c.o
$(foo:.o=.c)值为a.c b.c c.c

$(var: %.o = %.c)   被替换的字串有相同模式,%可在单词中间,还可改名称,不仅仅是后缀
如:
foo = aa1.o aa2.o aa3.o
$(foo: aa%.o = bb%.c)值为bb1.c bb2.c bb3.c

SOURCES = $(wildcard *.c)   产生该目录下所有以.c结尾的文件列表
    gcc -MM $(SOURCES) > depends   把.o作目标,.c和包含的.h(((除了<>包含的)))作为依赖
include depends
$(patsubst %.c,%.o,$(SOURCES))    把SOURCES中的.c变成.o
$(addprefix prefix,names...)   增加前缀,如:
       $(addprefix src/, foo bar)值为src/foo src/bar

SUBDIRS = list hello

all : subdirs

subdirs:
    for n in $(SUBDIRS); do $(MAKE) -C $$n || exit 1; done

clean:
    for n in $(SUBDIRS); do $(MAKE) -C $$n clean; done

?   :=   &   =   定义的变量有什么区别

阅读(826) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~