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

1.c/c++语言默认是支持标准输入输出库的,但是其他相关函数需要第三方引入,并且,编译程序时,需要链接上

2.使用数学库:#include<math.h>

3.线程支持类库:#include<pthread.h>

如果不能支持线程库:sudo yum install manpages-posix manpages-posix-dev

Makefile文件与Cmake文件

1.什么是Makefile

用于工程项目管理的文本文件,文件名为makefile的文件名

makefile可以大写,也可以小写,一般Makefile首字母使用大写

如果makefile和Makefile两个文件都存在一般使用小写

代码:all:
        @iecho "Makefile success"

@隐藏这一行字

2.什么是make

执行makefie的工具,是一个解释器

用来对makefile中的指令进行解析并执行一个shell指令

make这个指令在 /usr/bin 中,默认linux系统中都以及安装

如果没有安装make,安装指令如下

sudo yum install make

查看是否安装成功:make --version

3.makefile的用途

描述了整个工程的编译、链接规则

软件项目的自动化编译,相当于给软件编译写一份脚本文件

4.学习makefile的必要性

linux/unix环境下开发的必备技能

系统架构师、项目经理的核心技能

研究开源项目、linux内核源码的必需品

加深对底层软构造系统及过程的理解

5.如果学习makefile

1.理论基础

软件的构造过程、程序的编译和链接

面向依赖的思想:

依赖一个.cpp文件的程序

可执行程序 <--依赖于--.o文件<--依赖于--.s文件<--依赖于--.i文件<--依赖于--.cpp文件

依赖于多个.cpp文件

可执行程序 <--依赖于--.o文件<--依赖于--.s文件<--依赖于--.i文件<--依赖于--.cpp文件

可执行程序 <--依赖于--.o文件<--依赖于--.s文件<--依赖于--.i文件<--依赖于--.cpp文件

可执行程序 <--依赖于--.o文件<--依赖于--.s文件<--依赖于--.i文件<--依赖于--.cpp文件

2.项目编程基础

c++程序语言基础

c语言基础

多文件源码管理、头文件包含、函数声明与定义

6.makefile的工作过程

makefiel本身是面向依赖进行编写的

源文件 --->编译 --->目标文件 --->链接 --->可执行文件--->hello.cpp--->hello.o --->hello 

本质上一步就可以生成可执行程序,但是,由于在生成可执行程序时,可能会有多个文件进行参与,后期其他文件可能要进行更改,更改后,会影响到可执行程序的执行,其他没有更改的文件也要参加编译,浪费时间

7.第一个makefie

1.编写一个hello.cpp文件

#include<iostream>
#include<stdio.h>
using namespace std;

int main(int argc,const char *argv[])
{
cout<<"hellp world"<<endl;
return 0;
}

2.通过终端编译程序

3.使用makefile管理工程

编写makefile文件

简化的make文件

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会检测这个命令的返回码

        如果返回成功,则继续执行后面的命令        

        如果返回失败,则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 、enfid

ifneq、  else  、endif

2.使用

ifeq(要判断的量,判断的值)

        makefile语句

else

        makefile语句

endif

注意:
        条件语句从ifeq开始执行,括号与关键字减使用空格隔开

        括号里面挨着括号处,不允许加空格

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、付费专栏及课程。

余额充值