makefile例程使用

**

Make使用

**
直接运行make
选项

  • -C dir 读入指定目录下的Makefile
  • -f file 读入当前目录下的file文件作为Makefile
  • -i 忽略所有的命令执行错误
  • -l dir 指定被包含的Makefile所在目录
  • -n 只打印要执行的命令,但不执行执行这些命令
  • -p 显示make变量数据库和隐含规则
  • -s 在执行命令时不显示命令
  • -w 如果make在执行过程中改变目录,打印当前目录名
    Makefie的隐含规则
    隐含规则1:编译C程序的隐含规则
    “.o的目标的依赖会自动推导为”.c",并且其生成命令是“$(CC) -C $(CPPFLAGS) ( C F L A G S ) 隐 含 规 则 2 : 链 接 o b j e c t 文 件 的 隐 含 规 则 ” < n > " 目 标 依 赖 于 “ < n > . o " , 通 过 运 行 C 的 编 译 器 来 运 行 连 接 程 序 生 成 ( ” l d " ) , 其 生 成 命 令 是 : “ (CFLAGS) 隐含规则2:链接object文件的隐含规则 ”<n>"目标依赖于“<n>.o",通过运行C的编译器来运行连接程序生成(”ld"),其生成命令是:“ (CFLAGS)2object<n>"<n>.o",Cld"),(CC) $(LDFLAGS).o $(LOADLIBES) $(LDLIBS)".这个规则对于只有一个源文件的工程有效,同时也对多个object文件也生效。
  • x:x.o y.o z.o
  • 并且 ”x.c" “y.c” "z.c"都存在时,隐含文件将执行如下命令:
  • cc -c x.c -o x.o
  • cc -c y.c -o y.o
  • cc -c z.c -o z.c
  • cc x.o y.o z.o -o x
  • 如果没有一源文件和你的目标名字相关联,那么,最好写自己的生成规则,不然,隐含规则会报错
CC=gcc
CLFAGS=-Wall -O -g
f2:f1.o f2.o main.o
.PHONY:clean
clean:
	rm *.o test

Makefile的VPATH
VPATH:虚路径

  1. 在一些大工程中,有大量的源文件,我们通常的做法是将许多的源文件进行分类,并存放在不同的目录中。所以,当make需要去找源文件的依赖关系时,你可以在文件前加上路径,但最好的方法就是把一个路径告诉make,,让make在自动去找。
  2. Makefile文件中的特殊变量“VPATH"就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找依赖文件和目标文件。如果定义了这个变量,那,make就会在当前目录找不到的情况下,到指定的目录中去找文件了;
  3. VPATH=src:…/headers
  4. 上面的定义指定两个目录,”src“和”…/headers",make会按照这个顺序进行搜索,目录由:冒号:分割。
CC=gcc
CFLAGS=-Wall -I include
VPATH=src1:src2:main
f1:f1.o f2.o main.o
	$(CC) $(CFLAGS) $^ -0 $@
.PHONY:clean
clean:
	find ./-name "*o" -exec rm {}/;;rm f1

Makefile的嵌套

CC=gcc
SUBDIR=f1\
		f2\
		main\
		obj
OBJS=f1.o f2.o main.o
BIN=myapp
OBJS_DIR=bin
export CC OBJS BIN OBJS_DIR BIN_DIR

all:CHECK_DIR $(SUBDORS)
CHECK_DIR:
	mkdir -p $(BIN_DIR)
$(SUBDIRS):ECHO
	make -C $@
ECHO:
	@echo $(SUBDIRS)
	@echo begin compile
clean:
	@$(RM) $(OBJS_DIR)/*.O
	@rm -rf $(BIN_DIR)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值