如何使用第三方库,Makefile概念,使用,规则,条件执行

如何使用第三方库

        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:表示允许错误,退出

                

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值