makefile编写(一)基本规则

来源:互联网 发布:马龙丁宁知乎 编辑:程序博客网 时间:2024/05/18 06:42

一、一个简单的例子
创建一个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。

原创粉丝点击