Make简介和Makefile编写规则

1.什么是make?
 (1)make定义

  make工程管理器,是Linux下自动编译管理器;为了维护C程序文件,防止不必要的重新编译;对于维护具有相互依赖关系的文件特别有用,对文件和命令的联系提供一套编码方法

自动化编译。
  运行环境,需要一个命令程序make和一个文本文件makefile。

  例子:Makefile -->编译执行: make
all: main.c foo1.c foo2.c foo3.c (all方法)
  gcc main.c foo1.c foo2.c foo3.c -o all (all生成的文件,gcc后面为依赖的文件

  (2)make使用
  make [options] [target] ..
  options:make工具参数选项 target:Makefile中指定的目标
  -f 文件名        -C 路径名             -e 不允许在Makefile中替换环境变量的赋值
  -k 执行命令出错时,放弃当前目标,继续维护其他目标
  -s 执行但不显示命令,常用来检查Makefile的正确性
  -S 如果执行命令出错就退出

  (3)Make编译几点原则

  a.工程没有编译过,那么所有C文件都需要编译和链接

  b.某几个C文件被修改,则只需要编译被修改的C文件,并连接目标程序
  c.如果工程头文件被修改,则需要编译引入了这几个头文件的C文件,并链接目标程序

2.makefile书写规则

 (1)书写规则

目标文件名 : 依赖文件
命令行

目标文件名 : 依赖文件 ; 命令行
命令行
//备注:如果命令太长,可以 \ 作为换行符,Make对一行上有多少字符未限制

 (2)在规则中使用通配符:  

  * 任意字符  ? 单个字符  [..] 一个范围 。如[abcd] 表示a b c d四个字符

clean:
  rm -r *.o


print: *.c
  Ipr -p $?
  touch print

  $? 自动变量,表示所有比目标新的依赖文件集合
  通配符可以使用在变量中:如 object = *.o
  注意:上面通配符赋值,objects变量值就是*.o  

  (3)makefile中变量其实是C/C++中的宏,如果让通配符在变量中展开,即让objects值为

  所有.0的文件名集合,则
objects := $(wildcard *.o) //通过wildcard来指示,  伪目标: clean 不是文件,是一个标签。申明伪目标: .PHONY: clenn

  多目标:空格隔开
  $@ 表示目标集合

  (4)Make一条条执行,每条命令以tab键开头(命令tab键开头)。如:

exec:
  cd /home/huchao
  pwd

  //执行:make exec,会进入/home/huchao路径,并pwd命令打印结果

  忽略出错:命令前加减号-,不管命令是否出错都认为成功
exec:
  - cd /home/huchao
  pwd

  makefile中变量就像C/C++中的宏,代表一个文本字串,在makefile执行时候会自动展开在所使用的地方,区别变量可改变;

 (5)变量基础:  

  变量:可以包含字符、数字、下划线(可以数字开头),大小写敏感,  

  不含有 : # = 或空字符在声明时需要给与初值,使用 $变量名。赋值变量:支持嵌套赋值

  := 前面的变量不能使用后面的变量,只能使用前面已经定义好的变量
  如:
  A = $B
  B = too //则A为too,前面的变量可以引用后面的变量值

  X := foo
  y = $x bar
  x := later
  ===> y := foo bar
     x := later

 

 

posted on 2024-01-21 21:53  枫飘过的天1  阅读(23)  评论(0编辑  收藏  举报