makefile编写(一)基本规则

一、一个简单的例子
创建一个malefile文件如下:

  mainapp: main.o 1.o 2.o
      gcc -o mainapp main.o 1.o 2.o
  mian.o: main.c a.h
      gcc -c main.c
  1.o: 1.c a.h b.h
      gcc -c 1.c
  2.o: 2.c b.h c.h
      gcc -c 2.c

mainapp应用程序依赖main.o、1.o、2.o,依次类推main.o依赖main.c、a.h等等。
根据依赖关系进行编译。如果你的makefile的名字不是malefile或者Makefile,就需要加入编译选项-f。如:make -f Makefile1
二、使用makefile宏
同样扩展如上的makefile例子如下:

  1 all: mainapp
  2 
  3 CC = gcc
  4 
  5 #DEBUG
  6 CFLAGS = -I. -g -Wall -ansi
  7 
  8 #Release
  9 #CFLAGS = -I. -O -Wall -ansi
 10 
 11 mainapp: main.o 1.o 2.o
 12     $(CC) -o mainapp main.o 1.o 2.o
 13 main.o: main.c a.h
 14     $(CC) $(CFLAGS) -c main.c
 15 1.o: 1.c a.h b.h
 16     $(CC) $(CFLAGS) -c 1.c
 17 2.o: 2.c b.h c.h
 18     $(CC) $(CFLAGS) -c 2.c

这种宏的的处理方式与C语言的类似,当然make命令内部也内置了一些特殊的宏定义,百度一下就可以了。
三、makefile中内嵌shell脚本,编译执行文件到指定目录
还是扩展二的例子如下:

  1 all: mainapp
  2 
  3 CC = gcc
  4 
  5 INSTALLDIR = bin
  6 
  7 #DEBUG
  8 CFLAGS = -I. -g -Wall -ansi
  9 
 10 #Release
 11 #CFLAGS = -I. -O -Wall -ansi
 12 
 13 mainapp: main.o 1.o 2.o
 14     $(CC) -o mainapp main.o 1.o 2.o
 15 main.o: main.c a.h
 16     $(CC) $(CFLAGS) -c main.c
 17 1.o: 1.c a.h b.h
 18     $(CC) $(CFLAGS) -c 1.c
 19 2.o: 2.c b.h c.h
 20     $(CC) $(CFLAGS) -c 2.c
 21 
 22 clean:
 23     -rm mainapp main.o 1.o 2.o     #忽略rm的执行结果
 24 install: 
 25     @if [ -d $(INSTALLDIR) ]; \
 26     then \
 27         cp mainapp $(INSTALLDIR); \
 28         chmod a+x $(INSTALLDIR)/mainapp; \
 29         echo "Installed in $(INSTALLDIR)"; \
 30     else \
 31         echo "the $(INSTALLDIR) doesn't exist, please check!";\
 32     fi 

以上分别提供了debug和release版本。内嵌shell脚本中每行结束需要以\结尾,这是要把shell脚本连接成一行。并且需要注意\的格式,之气在vim上编写的时候,由于有几个\没有显示高亮导致载编译的时候无法判断到shell脚本连接为一行,导致程序编译不过,查了好长时间,网上有的说是unix的编码格式问题,但是试了也没用。所以在编写的时候一定要注意。
使用install和clean两个目标,一个用于安装,一个用于删除所有的.o文件。
make -f Makefile3 clean 和 make -f Makefile3 install。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非正经程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值