linux之工程管理器Make

工程管理器(make:实际上是借助了makefile文件来进行执行。

Make的作用:(实现了批处理)

为什么我们要使用该工具?

 (1):使用方便:即每次编译时不用在频繁的输入gcc命令,直接根据makefile编译规则

                  来命令自动对源文件编译和链接。

 (2):调试效率高:在时间戳内修改了一个源文件,只编译被修改的文件,而不用从头

                  始编译,避免了多余的编译工作量。

 

Makefile:(属于脚本文件------脚本语言)


由三项基本内容组成:

   (1):需要生成的目标文件。

   (2):生成目标文件所需要的依赖文件。

   (3):生成目标文件的编译规则命令行

*Makefile规定在书写命令行前必须加一个<Tab>键:(系统默认是缩进8格

如://Makefile:

test : a.o  b.o

       gcc  -o  test  a,o  b.o

a.o : a.c   b.h

           gcc  -c  a.c

b.o : b.c

       gcc  -c  b.c

<makefile :为什么.c文件要先生成.o文件,在生成可执行文件?>

  因为,在一个工程中,有许多的.c源文件,而先编译成.o文件是当你要改其中的一个源文件时,只需要编译相应的,o文件,而其他文件没有改变,所以相应的.o文件也不变,只需要编译改变的源文件。提高了代码的编译速度(企业最关心的)

 

Makefile特性:

   *  $(变量名):变量的命名可以是字符、数字、下划线。

   *  =”:递归赋值:如果右侧包含的其他变量的值发生变化时,被赋值变量的值也随

            之变化。

   *  “:=”直接赋值:

   *  +=”追加赋值:

   *  “?=”条件赋值: 如果变量原来无值则赋值,否则保持原来的值。

 

  伪目标:伪目标不是真正的目标文件,只是一个符号,使用.PHONY对它进行标识。

一些常用的基本函数:

*subst: 格式:$(subset参数1,参数2,参数3)

  功能:把参数3中的参数1替换成参数2,。返回值:被替换后的参数3.

  如:result  := $(subst china, the world, I love China)

  Result的值为“I love the world

 

*patsubst: 格式:$(patsubst模式参数,参数1,参数2)

   功能:把参数2中符合模式参数的单词替换成参数1.返回值:被替换后的参数2.

   如:result := $(patsubst  %.c%.ox.c  y.c)

   Result的值为“x.o  y.o

 

*wildcard: 格式:$(wildcard模式参数)

   功能:列出当前目录下所有符合模式参数的文件名。返回值:当前目录下所有符合模式

         参数的文件名。

   如:result := $(wildcard *.c)

   Result的值为当前目录下的所有c文件名。

 

*findstring  格式:$(findstring参数1,参数2)

   功能:在参数2中查找参数1,。返回值:如果找到返回参数1,没找到返回空。

   如:result := $(findstring me, you and me )-----result的值为“me.

       Result :=$(fingstring  she, you and me)----result的值为“”。

 

*filter  格式:$(filter模式参数, 参数1)

   功能:从参数1中筛选符合模式参数的字符串。返回值:符合参数模式的字符串。

   如:a := x.c y.c z.h

       Result  := $(filter %.c,  $(a))

       Result的值是“x.c  y.c

 

*addsuffix 格式:$(addsuffix参数1,参数2)

功能:在参数2中的每个单词加上后缀参数1.返回值:加上后缀的所有单词。

如:result := $(addsuffix   .c,  x   y)

   Result:的值为“x.c  y.c

 

*addprefix  格式:$(addprefix  参数1, 参数2)

功能:在参数2中的每个单词加上前缀参数1。返回值:加上前缀的所有单词。

如:resut  := $(addprefix  src/ , x.c  y.c)

    Result 的值为“src/x.c src/y.c

 

*foreach 格式: $(foreach变量参数,参数1,表达式)

功能:循环取出参数1中的单词赋给变量参数,然后运行表达式。返回值:表达式的结果

如: a  := x  y  z

    Result  := $(foreach b,  $(a),  $(b).c)

    Result的值为“x.c y.c z.c

 

*call  格式:$(call变量参数,参数.....)

 功能:循环把参数依次赋给变量参数中的$(1)$(2)...,。返回值:赋值后的变量值。

 如: a := $(2)  $(1)

    Result := $(call $(a),  x  y)

    Result的值为“yx

 

*if  1格式:$(if条件参数, 执行参数)

  功能:如果条件参数非空,运行执行参数部分。返回值:条件参数非空,返回执行参数

   如: result := $(if  China, world)

        Result的值为“world

     2格式:$(if条件参数,执行参数1,执行参数2)

   功能:如果条件参数非空,运行执行参数1;反之运行执行参数2.

   返回值:条件参数非空,返回执行参数1;反之返回执行参数2.

  如:a :=

      Result := $(if  $(a), china, world)

      Result的值为“world

 

*dir  格式:$(dir参数)

   功能:从参数中取出目录部分。返回值:目录部分。

   如: result := $(dir  /home/test/a.c)

        Result的值为“/home/test

 

*error 格式:$(error参数)

   功能:停止“make”运行名显示参数。返回值:参数。

   如:result := $(error error occure!)

       Result的值为“error occure!

 

*warning  格式:$(warning参数)

  功能:“make”运行时显示参数。返回值:参数。

  如:result := $( warning  warning  occure!)

      Result的值为“warning occure!


对于一个工程文件来说,它包含了许多源文件,而这些源代码按照功能不同都放在各自功能的目录下。因此,查看一个工程文件,应查看它每个目录下的Makefile,大致个分为这三类:scripts目录下的Makefile、总控Makefile、功能子目录下的Makefile。

  首先查看的是:scripts目录下的Makefile:里面定义了许多变量,相当于c语言中的头文件。

  其次查看的是:总控Makefile:作用是进入各个功能子目录下去执行make命令。

  最后查看的是:功能在目录下的Makefile:将src目录下的 .c文件编译成 .o文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值