首页 > 其他 > 详细

Makefile

时间:2016-09-04 22:27:41      阅读:245      评论:0      收藏:0      [点我收藏+]

简介
  什么是makefile。或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但要作一个professional的程序员,makefile还是必须要懂的。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,仅对GNU的make进行讲述,我的环境是Linux 14.02,make的版本是3.80。必竟,这个make是应用最为广泛的,也是用得最多的。在这里,仅对Makefile 的精简优化通过一个具体的例子进行说明。

  1 /**************************初始Makefile*******************************/
  2 edit : main.o kbd.o command.o display.o  3        insert.o search.o file.o outil.o
  4     cc -o edit main.o kbd.o command.o display.o  5         insert.o search.o file.o outil.o
  6 main.o : main.c defs.h
  7     cc -c main.o 
  8 kdb.o : kdb.c defs.h command.h 
  9     cc -c kbd.c 
 10 command.o : command.c defs.h command.h
 11     cc -c command.c
 12 display.o : display.c defs.h buffer.h
 13     cc -c display.c
 14 insert.o : insert.c defs.h buffer.h
 15     cc -c insert.c
 16 serach.o : search.c defs.h buffer.h
 17     cc -c search.c
 18 file.o : file.c defs.h buffer.h command.h
 19     cc -c file.c
 20 outil.o : outil.c defs.h
 21     cc -c outil.c
 22     
 23 clean:
 24     rm main.o kbd.o command.o display.o 25        insert.o search.o file.o outil.o
 26  
 27 /**************************精简Makefile(1)*******************************/  
 28                           运用变量和通配符
 29                           $@ 目标文件
 30                           $^ 所有依赖文件
 31                           $* 不带扩展名的文件
 32                           $< 第一个依赖文件
 33 /************************************************************************/
 34 object = main.o kbd.o command.o display.o 35        insert.o search.o file.o outil.o
 36 edit :$(objiect)   
 37     cc -c $@ $^
 38 main.o : main.c defs.h
 39     cc -c main.o 
 40 kdb.o : kdb.c defs.h command.h 
 41     cc -c kbd.c 
 42 command.o : command.c defs.h command.h
 43     cc -c command.c
 44 display.o : display.c defs.h buffer.h
 45     cc -c display.c
 46 insert.o : insert.c defs.h buffer.h
 47     cc -c insert.c
 48 serach.o : search.c defs.h buffer.h
 49     cc -c search.c
 50 file.o : file.c defs.h buffer.h command.h
 51     cc -c file.c
 52 outil.o : outil.c defs.h
 53     cc -c outil.c
 54     
 55 clean:
 56     rm edit $(object)
 57 /**************************精简Makefile(2)*******************************/ 
 58                                   运用变量和通配符
 59                          隐晦规则(遇到*.o文件自动推到其依赖*.c文件)
 60 /**************************************************************************/ 
 61 object = main.o kbd.o command.o display.o 62        insert.o search.o file.o outil.o
 63 edit :$(objiect)
 64     cc -c $@ $^
 65 main.o : defs.h
 66     cc -c main.o 
 67 kdb.o : defs.h command.h 
 68     cc -c kbd.c 
 69 command.o : defs.h command.h
 70     cc -c command.c
 71 display.o : defs.h buffer.h
 72     cc -c display.c
 73 insert.o : defs.h buffer.h
 74     cc -c insert.c
 75 serach.o : defs.h buffer.h
 76     cc -c search.c
 77 file.o : defs.h buffer.h command.h
 78     cc -c file.c
 79 outil.o : defs.h
 80     cc -c outil.c
 81     
 82 clean:
 83     rm edit $(object)
 84     
 85 /**************************精简Makefile(3)*******************************/ 
 86                                    变量定义和通配符
 87                          隐晦规则(遇到*.o文件自动推到其依赖*.c文件)
 88                                     文件指示
 89 /**************************************************************************/ 
 90 object = main.o kbd.o command.o display.o 91        insert.o search.o file.o outil.o
 92 edit :$(objiect)
 93     cc -c $@ $^
 94 $(object) : defs.h
 95 kbd.o command.o fille.o : comman.h
 96 display.o insert.o search.o file.o : buffer.h
 97 clean:
 98     rm edit $(object)
 99     
100 /**************************精简Makefile(4)*******************************/ 
101                                    变量定义和通配符
102                          隐晦规则(遇到*.o文件自动推导其依赖*.c文件)
103                                     文件指示
104                               .PHONY clean表示clean是伪目标
105 /*************************************************************************/     
106 object = main.o kbd.o command.o display.o107        insert.o search.o file.o outil.o
108 edit :$(objiect)
109     cc -c $@ $^
110 $(object) : defs.h
111 kbd.o command.o fille.o : comman.h
112 display.o insert.o search.o file.o : buffer.h
113 .PHONY: clean
114 clean:
115     rm edit $(object)
116     
117 /******************************终极版***********************************/
118 object = main.o kbd.o command.o display.o119        insert.o search.o file.o outil.o
120 edit :$(objiect)
121     cc -c $@ $^
122 .PHONY: clean
123 clean:
124     rm edit $(object)

 

/**************************初始Makefile*******************************/
edit : main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
    cc -o edit main.o kbd.o command.o display.o\
        insert.o search.o file.o outil.o
main.o : main.c defs.h
    cc -c main.o
kdb.o : kdb.c defs.h command.h
    cc -c kbd.c
command.o : command.c defs.h command.h
    cc -c command.c
display.o : display.c defs.h buffer.h
    cc -c display.c
insert.o : insert.c defs.h buffer.h
    cc -c insert.c
serach.o : search.c defs.h buffer.h
    cc -c search.c
file.o : file.c defs.h buffer.h command.h
    cc -c file.c
outil.o : outil.c defs.h
    cc -c outil.c
    
clean:
    rm main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
 
/**************************精简Makefile(1)*******************************/  
                          运用变量和通配符
                          $@ 目标文件
                          $^ 所有依赖文件
                          $* 不带扩展名的文件
                          $< 第一个依赖文件
/************************************************************************/
object = main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
edit :$(objiect)   
    cc -c $@ $^
main.o : main.c defs.h
    cc -c main.o
kdb.o : kdb.c defs.h command.h
    cc -c kbd.c
command.o : command.c defs.h command.h
    cc -c command.c
display.o : display.c defs.h buffer.h
    cc -c display.c
insert.o : insert.c defs.h buffer.h
    cc -c insert.c
serach.o : search.c defs.h buffer.h
    cc -c search.c
file.o : file.c defs.h buffer.h command.h
    cc -c file.c
outil.o : outil.c defs.h
    cc -c outil.c
    
clean:
    rm edit $(object)
/**************************精简Makefile(2)*******************************/
                                  运用变量和通配符
                         隐晦规则(遇到*.o文件自动推到其依赖*.c文件)
/**************************************************************************/
object = main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
edit :$(objiect)
    cc -c $@ $^
main.o : defs.h
    cc -c main.o
kdb.o : defs.h command.h
    cc -c kbd.c
command.o : defs.h command.h
    cc -c command.c
display.o : defs.h buffer.h
    cc -c display.c
insert.o : defs.h buffer.h
    cc -c insert.c
serach.o : defs.h buffer.h
    cc -c search.c
file.o : defs.h buffer.h command.h
    cc -c file.c
outil.o : defs.h
    cc -c outil.c
    
clean:
    rm edit $(object)
    
/**************************精简Makefile(3)*******************************/
                                   变量定义和通配符
                         隐晦规则(遇到*.o文件自动推到其依赖*.c文件)
                                    文件指示
/**************************************************************************/
object = main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
edit :$(objiect)
    cc -c $@ $^
$(object) : defs.h
kbd.o command.o fille.o : comman.h
display.o insert.o search.o file.o : buffer.h
clean:
    rm edit $(object)
    
/**************************精简Makefile(4)*******************************/
                                   变量定义和通配符
                         隐晦规则(遇到*.o文件自动推导其依赖*.c文件)
                                    文件指示
                              .PHONY clean表示clean是伪目标
/*************************************************************************/     
object = main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
edit :$(objiect)
    cc -c $@ $^
$(object) : defs.h
kbd.o command.o fille.o : comman.h
display.o insert.o search.o file.o : buffer.h
.PHONY: clean
clean:
    rm edit $(object)
    
/******************************终极版***********************************/
object = main.o kbd.o command.o display.o\
       insert.o search.o file.o outil.o
edit :$(objiect)
    cc -c $@ $^
.PHONY: clean
clean:
    rm edit $(object)

Makefile

原文:http://www.cnblogs.com/chenshikun/p/5840352.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!