如何使用第三方库
1.C/C++语言默认是支持标准输入输出库的,但是其他的相关函数需要第三方引入,编译程序时,需要链接上对应的库
2.使用数学库:#include<mah.h>
3.线程支持类库:#include<pthread.h>
如果不能支持线程库:sudo apt install manpages-posix manpages-posix-dev
Makefile文件和Cmake文件
1.什么时Makefile
用于工程项目管理的一个文本, 文件名为Makefile的文本文件。Makefile可以大写也可以小写,一边拿Makefile首字母使用大写,如果Makefile和makefile文件都存在,系统会默认使用小写的

2.什么是make
make是一个执行Makefile的工具,是一个解释器,用来对Makefile中的命令进行解析并执行一个shell执行
make这个指令在/usr/bin中,默认Linux系统中都已经安装
如果没有安祖make,安装指令如下:sudo apt install make
查看是否安装成功:make--version
3.Makefile的用途
描述了整个工程的编译,链接规则
软件项目的自动化编译,相当于给软件写一份脚本文件
4.学习Makefile的必要性
Linux/Unix环境下开发的必备技能
系统架构师,项目经理的核心技能
研究开源项目,Linux内核源码的必需品
加深对底层软件架构系统及过程的理解
5.如何学习Makefile
1.理论基础
软件的构造过程:程序的编译和链接:预处理->编译->汇编->链接
面向依赖的思想:依赖一个,cpp文件的编程
可执行程序<-依赖于<--.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
依赖多个.cpp文件的程序
可执行程序<-依赖于<--.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
i --.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
i --.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
i --.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
i --.o文件<--依赖于.s文件<--依赖于.l文件<--依赖于<--.cpp文件
2.项目编程基础
c++程序语言基础,C语言基础,多文件源码管理基础,头文件包含,函数声明与定义
6.Makefile的工作过程
Makefile本身是面向依赖进行编写的
源文件-->编译-->目标文件-->链接-->可执行文件
hello.cpp-->hello.o-->hell
本质上一步就可以生成可执行程序,但是,由于在生成可执行程序时,可能会有多个文件进行参与,后期其他文件要进行更改,更改后,会影响到可执行程序的执行,其他没有更改的文件也要参与编译,浪费时间
7.第一个Makefile
1、编写一个hello.cpp文件
2、通过终端编译程序
3、使用Makefile管理工程
编写Makefile文件
简化的Makefile文件
4、执行Makefile文件
make -->默认找到Makefile中的第一个目标开始进行执行
make 目标 --->找到对应的目标进行执行
8.Makefile的语法规则
1、规则
构成Makefile的基本单元,构成依赖关系的核心部件
其他内容跟可以看作为规则的服务
2、变量
类似于C++中的宏,使用变量:$(变量名)或者${变量名}
作用:使得Makefile更加灵活
3、条件执行
根据某一变量的值来控制make执行或者忽略Makefile的某一部分
4、函数
文本处理函数:字符串的替换,查找,过滤等
文件名的处理:读取文件/目录名,前后缀等
5、注释
Makefile中的注释,是以#号开头
9.规则
1.规则的构成:目标、目标依赖,命令
2.语法格式
目标:目标依赖
命令
注意事项:
命令必须使用tab键开头,一般是shell指令
一个规则中,可以无目标依赖,仅仅是实现某种操作
一个规则中可以没有命令,仅仅描述依赖关系
一个规则中,,必须要有一个目标
3.目标详解
1)默认目标
一个Makefile里面可以有多个目标,一般会选择第一个当做默认目标,也就是make默认执行的目标
2)多目标
一个规则中可以有多个目标,多个目标具有相同的生成命令和依赖文件
clean distclean:
rm hello.[^cpp] hello
3)多规则目标
多个规则可以是同一目标
all:test1
all:test2
test1:
echo "hello"
test2:
echo "world"
4)伪目标
并不是一个真正的文件名,可以看做是一个标签,无依赖,相比于一般文件,不会重新生成,执行
伪目标:可以无条件执行,相当于对应的指令
eg:
.PHONY:clean #设置伪目标
clean:
rm hello.[^cpp] hello
4、目标依赖
1)文件时间戳
根据时间戳来判断目标依赖是否需要更新,所以文件都更改过,则对所有文件进行编译,生成可执行文件,在上次make之后修改过的cpp文件,会被重新编译,在上次make只写修改过的头文件,依赖该头文件的目标依赖也会重新编译
2)模式匹配
%:通配符匹配
&@:目标
&^:依赖
&<:第一个依赖
*:普通通配符
注意:%是Makefile中的规则通配符,而*是普通通配符
5.命令
1}命令的组成:有shell命令组成,由tab键开头
2}命令的执行:每条make会开一个进程,每条命令执行完会检测这个命令的返回码,如果返回成功则继续执行后续的命令,如果返回失败,make会终止当前的规则并退出
3}并发执行命令
make -j4 --->表示开辟4个线程执行
time make --->执行make时,显示当前时间
10、变量
1.变量基础
1}变量定义:变量名=变量值
2}变量的赋值
追加赋值:+= 在原有的基础上追加相关的内容
条件赋值:?= 如果之前没有值,则为变量赋值,如果之前有值,则不进行赋值
3}变量的使用:$(变量名)或者${变量名}
2.变量的分类
1}立即展开变量
使用:=操作符进行赋值
在解析阶段直接赋值常量字符串
2)延迟展开变量
使用=操作符进行赋值
将最后一次赋值的结果给变量名使用
3}注意事项
一般在目标,目标依赖中使用立即展开赋值,在命令中一般使用延迟展开赋值变量
3.变量的外部传递
可以通过命令行将给变量进行赋值操作
make ARCH =g++
11、条件执行
1.关键字
ifeq,else,endif
ifneq,else,endif
2.使用
ifeq(要判断的量,判断的值)
Makefile语句
else
Makefile语句
endif
注意:
条件语句从fieq开始执行,括号与关键字之间使用空格隔开
括号里面挨着括号处,不允许加空格
12、总结
1.执行过程
进入编译目录:执行make命令
依赖关系阶段
命令执行阶段
2.依赖解析阶段
解析Makefile,建立依赖关系树
控制解析过程,引入Makefile,变量展开,条件执行
生成依赖关系树
3.命令执行阶段
把解析生成的依赖关系树加载到内存,按依赖关系,按顺序生成这些文件
再次编译make会检测文件的时间戳,判断是否过期
如果无文件过期,在不在编译
如果有文件更新,则依赖该文件的所有依赖关系上的目标都会重新编译
4.make的执行结果
make的退出码
0:表示成功执行
1:表示允许错误,退出
2507

被折叠的 条评论
为什么被折叠?



