Make工程管理器

          概述:所谓工程管理器,是指管理较多的文件。人们通过利用Make工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作。Make工具通过Makefile文件来完成自动维护编译工作。Makefile主要定义了源文件之间的倚赖关系,说明了如何编译各个源文件并连接生成可执行文件。GNU Make工具当前目录中按如下顺序搜索Makefile:

          GNUmakefile;    

           makefile;

          Makefile。

       使用Make管理器,在make命令后键入目标名;如直接运行make,则建立Makefile中的第一个目标。在UNIX中习惯使用Makefile作为Makefile文件。Makefile文件就像一个Shell脚本,其中也可以执行操作系统命令。

       Makefile中语句的格式:

       target : dependency_files

       <tab>command

       注意:在Makefile中的每一个command前必须有Tab符,否则出错。

        例子:

          /************hello.c*****************/

#include<stdio.h>

#include"hello.h"

void printHello(){

     printf("Hello!\n");

}

void main() {

    printHello();

}

 /************hello.h*****************/

void printHello();

 /************Makefile*****************/

hello : hello.o

    gcc hello.o -o hello

hello.o : hello.c hello.h

    gcc -c hello.c -o hello.o

clean : 

    rm *.o hello

Makefile中 '#' 开头为注释行,如果一行写不完则可使用 '\' 换行续写。clean是一个动作的名字,类似label

$ make clean

将删掉目录中的hello.o和hello文件。

          当只输入make命令时,会在当前目录找名字为Makefile的文件,若找到,就会寻找文件中的第一个目标文件,将其作为最终目标文件。

        1.    Makefile变量

         推荐使用小写字母作为变量名,预留大写字母作为控制隐含规则参数或用户重载命令选项参数的变量名

         Makefile中变量定义有两种方式:一种是递归展开方式,另一种是简单方式。递归展开方式一次性将内嵌变量全部展开,可能导致无穷循环,如CFLAGS=$(CFLAGS) -O  。简单展开方式只展开一次。

         递归展开方式的定义格式:VAR=var 。

          简单展开方式的定义格式:VAR:=var 。

         Make中的变量格式为 $(VAR)

         Makefile中变量分为用户自定义变量,预定义变量,自动变量,环境变量。

         预定义变量如AR,AS,CC,CPP,CXX,RM,ARFLAGS,ASFLAGS,CFLAGS,CPPFLAGS,CXXFLAGS。

         自动变量可以代表编译语句中出现的目标文件和依赖文件等,并且具有本地含义(即下一语句中出现的相同变量代表的是上一语句的目标文件和依赖文件)。如

$*  不包含扩展名的目标文件,$+,$<,$?,$@,$^,$% 。

        环境变量。可以使用系统环境变量。

       2. Makefile规则

        2.1隐式规则

            如可以将.c 变为 .o

        2.2模式规则

            自定义规则,如将.c 变为 .o

            %.o : %.c

            $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ @<

            

        3. 自动生成Makefile文件

        可以使用autotools工具生成configure文件,通过执行configure命令即可生成Makefile文件。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值