#Linux(make工具和makefile文件以及makefile语法)

(一)发行版:Ubuntu16.04.7


(二)记录:

(1)make为编译辅助工具,解决用命令编译工程非常繁琐的问题

(2)在终端键入make即可调用make工具(在当前目录寻找makefile文件)

(3)makefile是描述整个工程编译和链接的文件

(4)makefile文件必须为makefile或者Makefile

(5)make及makefile使用

a.创建一个源文件(编写了程序)并且创建一个makefile文件

b.在makefile文件中写入规则,保存退出

 c.键入make命令编译


(三)命令:

Make语法上:

目标:依赖

[Tab]命令

如:

/**整个编译**/

all:
    gcc hello.c -o hello


/**部分编译**/

hello.o:hello.c
    gcc -c hello.c -o hello.o


/**部分编译**/

hello:hello.o
    gcc hello.o -o hello

 (1)示例:

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o

 

make + 文件名单独编译某一个文件,但是如果编译的文件不存在依赖其他编译命令生成,那么就会先编译他所依赖的文件,形成联动编译。如果只键入make那么就会默认编译第一个规则

(2)编译完成之后会产生一些中间文件如.o文件,也可以在makefile中进行规则定义删除

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o

//删除所有.o文件以及hello可执行文件
clean:
    rm -rf *.o hello

 (3)如果vim编辑器无法键入[Tab]

(4)makefile所在文件夹不能有与目标文件名相同的文件

如目标编译hello,该目录下就不能有名为hello的文件,否则会报错make :'hello' is up to date.为了解决文件可能同名的问题引入“伪目标”的概念 ,只需加入".PHONY:目标",如将clean改为伪目标。

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o


.PHONY:clean
clean:
    rm -rf *.o hello

(5)变量赋值:

:=      立刻赋值

=          延迟赋值

?=      如果前面没有赋值则在这里赋值,如果前面赋值了则这里不赋值

+=       追加赋值

$(变量1)    引用变量1

(另一种追加方式 aaa\bbb\ccc) 

(6)makefile文件中的注释为“#

(7)自动化变量:

$@        表示所有目标

$<          表示第一个依赖文件,如果依赖模式是%,那么它就表示一系列文件。(%通配符类似*)

$            表示所有依赖

 Make语法下:

(1)wildcard函数--------------------展开指定目录

格式     $(wildcard pan)

此处echo前面加上@即可不打印echo,只打印下面的内容 

(2)notdir-----------------------------去掉路径

格式     $(notdir $(var))

(3)dir---------------------------------取出目录

格式      $(dir  name)

(4)patsubst--------------------------替换文件后缀

格式        $(patsubst 原文件,目标文件,文件列表)

替代      $(文件列表:原文件=目标文件)

使用这个函数并没有改变原文件,一般配合其他函数使用

(5)foreach        把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行<text>所包含的表达式,每一次<text>会返回一个字符串

格式:$(foreach <var>,<list>,<text>)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值