IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> MakeFile 学习日记二(C++)makeFile中的变量、自动推导、风格、清除 -> 正文阅读

[C++知识库]MakeFile 学习日记二(C++)makeFile中的变量、自动推导、风格、清除

edit : main.o kbd.o command.o dislplay,o \
insert.o search.o files.o utils.o 
cc -o edit main.o kbd.o command.o dislplay,o \
insert.o search.o files.o utils.o 

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o :command.c defs.h command.h 
cc -c insert.c 
display.o :display.c defs.h buffer.h 
cc -c display.c 
insert.o :insert.c defs.h buffer.h 
cc -c insert.c 
search.o :search.c defs.h buffer.h 
cc -c search.c 
files.o :files.c defs.h buffer.h command.h
cc -c files.c 
utils.o :utils.c defs.h buffer.h 
cc -c utils.c 

clean:
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

上面是我上一篇文章用引用的代码例子,现在我们用这个例子进行解释。

一、Makefile中的变量

edit : main.o kbd.o command.o dislplay,o insert.o search.o files.o utils.o 
cc -o edit main.o kbd.o command.o dislplay,o insert.o search.o files.o utils.o 

首先说明一下edit的规则:

? ? ? ? (.o)库文件在这里写了两遍,当然完整写的话,clean中也需要再写一遍。当我们的工程中引入了一个新的(.o)文件时,我们需要在这两个地方加入他们,但是随着代码的复杂度增加,这中工作可能就会变得繁琐,我们可能也会因此忘记。为此引入了Make file中的变量(字符串),我们可以将它相近的理解为C语言中的宏。

比如我们可以声明一个objects变量或者是OBJ ,我们就可以在Make file文件的开头定义:

objects = main.o kbd.o command.o \
insert.o search.o files.o utils.o

然后我们就能够在makefile中以 “$(objects)”来使用这个变量了,下面是改版后的样子

objects = main.o kbd.o command.o \
insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h
cc -c kbd.c
command.o :command.c defs.h command.h 
cc -c insert.c 
display.o :display.c defs.h buffer.h 
cc -c display.c 
insert.o :insert.c defs.h buffer.h 
cc -c insert.c 
search.o :search.c defs.h buffer.h 
cc -c search.c 
files.o :files.c defs.h buffer.h command.h
cc -c files.c 
utils.o :utils.c defs.h buffer.h 
cc -c utils.c 

clean:
rm edit $(objects)

这样当我们在新加入库文件,我们只需要在变量中添加就可以了。

二、Make的自动推导

????????GUN的make功能时很强大的,它能够自动的推导文件以及文件以来后面的命令,所以我们没必要在每一个(,o)文件后面都写上相同的命令。它能够自动推到命令。

? ? ? ? 具体是怎样操作呢,当make发现一个(.o)文件后,他会自动把(,c)文件加到依赖关系中。例如 make 找到一个 a.o的文件,那么 a.c文件就是a.o的依赖文件,并且cc -c a,c 也会被他自动补全。所以上面代码我们还可以省略:

objects = main.o kbd.o command.o \
insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)

main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h 
display.o : defs.h buffer.h 
insert.o : defs.h buffer.h 
search.o : defs.h buffer.h 
files.o : defs.h buffer.h command.h
utils.o : defs.h buffer.h 

.PHONY:clean
clean:
rm edit $(objects)

上面的(.PHONY)表示clean是一个伪目标文件。这个后面再说。

三、Makefile的风格

还有一种更加简约的风格,但是不是那么容易理解,我把它贴出来,大家自己理解就行

objects = main.o kbd.o command.o \
insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)

$(objects) :defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o :buffer.h

.PHONY:clean
clean:
rm edit $(objects)

哎!像我这种比较笨的,就不适合写这样的,费脑子。

四、清空目标文件的规则

每一个makefile文件中都要写一个清空目标文件的规则,这样能够保证我们文件的整洁,

下面有两种写法

写法一:

clean:
rm edit $(objects)

写法二:

.PHONY:clean
clean:
-rm edit $(objects)

事实上写法二是比较稳妥的写法。

????????(.PHONY)之前提到过,他会标注clean是一个伪目标。

????????在rm之前加一个“-”是有啥用呢他会在当rm某些文件碰到问题时不去理会,继续执行后面的事情,

至于为啥么吧clean放在文件最后,这个其实放哪里也可以,大家习惯这样而已。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:51:13  更:2021-12-07 11:53:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:13:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码