Makefile是什么东东?有什么用?怎么用?

makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件!  
   
  在unix系统下,makefile是与make命令配合使用的。

 

举个例子吧,我现在有main.c   、window.c   、model.c   、data.c   4个.c文件和window.h   、model.h   、data.h   3个.h文件。  
  main.c是主程序,里面有main()函数。其他的都是模块。  
   
  如果要生成最终的可执行文件,要做以下步骤:  
  1、分别编译window.c   、model.c   、data.c   、main.c   ,将会得到3个目标文件:window.o   、model.o   、data.o   、main.o  
  2、把这4个.o   (在windows下就是.obj)文件链接起来,得到main.out(在windows下就是main.exe)。  
   
  那么这些文件就要有逻辑关系,否则编译器不知道怎么编译。  
   
  all:main.out  
  main.out:main.o   window.o   model.o   data.o  
          gcc   -o   main.out   main.o   window.o   model.o   data.o  
   
  #上面的意思是说:  
  #all:main.out  
  如果想要编译所有:make   all,那么将会生成main.out可执行文件。  
   
  #main.out:main.o   window.o   model.o   data.o  
  而要生成这个main.out,需要依赖main.o,window.o,model.o,data.o   4个文件。  
   
  #         gcc   -o   main.out   main.o   window.o   model.o   data.o  
  这句是调用编译器编译,vc用的是cl。变异的时候可以加上很多的参数、定义的宏、链接库路径等。  
   
  当然,还没有完呢,这些main.out依赖的这些   .o   怎么来的?  
   
  window.o:window.c   window.h  
          gcc   -c   window.c  
   
  model.o:model.c   model.h  
          gcc   -c   model.c  
   
  data.o:data.c   data.h  
          gcc   -c   data.c  
   
  上面的-c参数是指定编译器编译出一个.o文件就可以了,不要再寻找main()函数做链接工作。  
   
  这些和到一起,就是一个makefile,当然这些功能还太少,可以加上很多别的项目。但宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。  
   
  现在的VC++真是太好了,不用一个字一个字的去敲Makefile   了。   ^_^

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值