编写Makefile的心得

1,学习makefile的写法
  target:prerequisites
   command
   
   
    target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。

    prerequisites就是,要生成那个target所需要的文件或是目标。

    command也就是make需要执行的命令。(任意的Shell命令)
 如:
 
  INCL=-I$(HOME)/include
  LIB=-L$(HOME)/lib
  main:main.o
  main.o:main.c
 cc -o main main.c
  clean:
 rm main.o
 又如:
 INCL=-I$(HOME)/include
 LIB=-L$(HOME)/lib
 all: main
 main:main.c
 cc -o main main.c 
 clean:
 rm main.o
 
  以上用的有中间文件 main.o,也可能不用
  INCL=-I$(HOME)/include
  LIB=-L$(HOME)/lib
  main:main.c
 cc -o main main.c
  clean:
 rm main.o
 
2.定义变量,把中间.o文件定义成变量
INCL=-I$(HOME)/include
LIB=-L$(HOME)/lib
OBJ=main.o
main:$(OJB)
main.o:main.c
 cc -o main $(OJB)
clean:
 rm main.o
3.清空
INCL=-I$(HOME)/include
LIB=-L$(HOME)/lib
OBJ=main.o
main:$(OJB)
main.o:main.c
 cc -o main $(OJB)
clean:
 rm main $(OJB)
更好的做法是
.PHONY clean:
 -rm main $(OJB)
这里
.PHONY告诉clean是一个伪目标
 -rm的意思:如果有文件出现问题,但不要管,往下删
 
 4.自动化变量
 $@---表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。
 如:
 main:$(OBJ)
 cc -o $@ $(OBJ)
 和
  main:$(OBJ)
 cc -o main $(OBJ)
 
 也就是说   $@相当于 main

5,完整的makefile
INCL=-I$(HOME)/include
LIB=-L$(HOME)/lib
all: main clean
CL=/opt/K/SCO/unixds/5.1.2A/usr/ccs/bin/cc
OBJ=main.o
main:$(OBJ)
 @$(CL) -o $@ $(OBJ)
 @mv $@ $(HOME)/lib
 @echo 编译完毕 
.PHONY clean:
 rm $(OBJ)
 @echo 清除*.o文件
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值