Make编译机制,Configure

  • 1.Make机制
    • demo1.make编译
    • demo2.make清理
    • demo3:make 安装
    • demo4:make 卸载
  • 2.configure
    • 2.1 Autoconf
    • 2.2 软件的源码安装

软件发布的一些基础知识。

  1. gcc, cpp, as, ld–施工队,底层干活工人
  2. make --包工头,指挥工人工作
  3. configure–分析师,分析材料是否具备
  4. Autoconf–市政规划局,派出有用的分析师

内存泄漏–如果一个长时间运行的程序,不断申请新的控价,而且不释放。内存空间被一点一点地消耗光。

内存管理机制

  1. windows总是喜欢尽量留出空间来给程序用
  2. Linux–尽可能多的把会用到的库、命令等统统都搬进来,能占多少是多少。要运行程序时,他把东西一点一点搬进内存,Linux就把原来占用的资源一点一点往外搬。–Copy-on-Write

free 命令查看内存使用情况(单位为KB)

  1. men–内核缓冲后的利用率
  2. buffer/cache–软件占用的内存

发布软件
本机编译得到的二进制文件,需要很多库文件来协助才能运行的起来。
查看程序的依赖库,使用ldd命令。

lld ./rubbish1115

因为需要众多库文件协助,所以在Linux上发布软件时都是发布源码包,然后在目标系统上再编译一遍。

1.Make机制

Make 也是一个程序,用于统筹规划文件编译。通过Makefile来实现统筹规划。能够依据文件修改的时间,智能地判断出哪些模块需要重新编译,重新连接。

windows下的VC也是类似的作用,只不过把他们都用图形界面封装了起来。

make 命令运行的时候,会在当前目录下查抄Makefile 或者 makefile文件。找到就执行,没找到就报错。makefile每一段的格式都类似

目标:原料
<tab>加工方法

demo1.make编译

all:main.o part1.o part2.o        gcc main.o part1.o part2.o -o mybin
main.o:mian.cgcc -c main.c
part1.o:part1.cgcc -c part1.c
part2.o:part1.cgcc -c part2.c
  1. make 不加任何参数的时候,从all 这一段开始工作。如果原料部分文件不存在,往下去寻找相应的文件,找到后返回,直至加工方法执行完成。
  2. make +参数来指定目标,那么就会去只想指定目标对应的那一段
  3. make 没有指定目标,makefile中也没有all, 从文件开始处执行。
  4. Makefile文件可以引用另一makefile文件,因此一个工程软件中,经常可以看到不同源码目录下都有一个makefile文件。

demo2.make清理

clean:rm ./*.orm mybin

demo3:make 安装

将编译好的mybin文件,复制到系统中相应的目录中,完成安装

install:mybincp ./mybin /user/bin/

demo4:make 卸载

作为一个标准的GNU软件,生成的makefile中应该高喊uninstall的定义。如果不规范的软件,没有提供uninstall方法,就只能手动删除了。

make uninstall

(瞎猜,盲写)

uninstall:rm /user/bin/mybin

2.configure

检查编译的各种条件是否必备,检查各种条件都必备之后,会生成Makefile文件。
铁打的make只有一个,流水的configure每个软件一个。
运行./configure 之后,会检查各种各样的条件,例如 “checking for xxxxx yes/no”, 不是必须的材料没有了也就没有了。如果必须的东西没有了,那么confiugre就会报错并停止。

2.1 Autoconf

自动生成configure文件(几万行,自己敲时不可能了。)

  1. autoscan–检查源码目录结构,生成confiugre.scan报告。(人工)修改该文件,生成configure.in文件,解释一些有用的内容:

autoscan

# AC_INIT(main.c)--说明这个工程主要的图纸是那个文件.
# AM_INIT_AUTOMAKE(rubbish1115,1.0)--说明这个项目的名称,叫做rubbish115, 版本是1.0.
# AC_PROG_CC--configure需要检查C语言编译器是否正常.
# AC_OUTPUT(Makefile)--configure需要产生的文件叫Makefile.
  1. aclocal–查看configure.in文件,对一些宏定义做一些详细的注解和说明,并生成aclocal.m4报告

aclocal

3.autoconf-依据configure.in 和aclocal.m4生成configure脚本
4.automake–生成configure脚本能够识别和使用的makefile.in文件(自己写的makefile文件不管用)。需要(人为)提供草稿文件makefile.am。
makefile.am文件内容

AUTOMAKE_OPTIONS=foreign    # 行业规范,
bin_PROGRAMS=rubbish1115    # 说明编译之后的程序叫rubbish1115
rubbish1115_SOURCES=main.c ai.c board.c # 说明这个工程包括这三个文件

Automake主要帮助开发GNU软件的人员来维护软件,所以在执行Automake时,默认会检查目录下是否存在标准GNU软件中应具备的文件,例如NEWS,AUTHOR, ChangeLog等文件。设置foreign,则会忽略对这些文件的检查。

2.2 软件的源码安装

原料都准备好之后,依次运行以下三条命令,就能把软件安装上

./configure
make
make install

Linux(17)-Make编译,Configure相关推荐

  1. linux 源码编译 ./configure 的配置和用法

    阅读目录 1. linux从源码编译到安装软件的3个步骤 2. ./configure 的配置和用法 基本配置 配置安装目录 微调安装目录 配置程序名称 配置系统类型 配置可选特性 配置包选项 配置编 ...

  2. linux下如何使用configure/make/make install命令编译安装卸载程序

    源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install).安装成功的源码就是所谓的可执行文件,在你不需要的时候,也是可以删除/卸载(remove/u ...

  3. Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书

    Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书 安装 Nginx 安装依赖 $ apt-get update $ apt-get install build-e ...

  4. OpenCV在Linux下的编译安装(Ubuntu )

    OpenCV在Linux下的编译安装(Ubuntu ) 1.先安装相关的库: sudo apt-get install build-essential sudo apt-get install lib ...

  5. qrencode二维码生成在linux下的编译

    qrencode编译需要libpng库,而libpng库依赖zlib库 1.从http://zlib.net/下载zlib库 tar xvzf zlib-1.2.8.tar.gz,进入zlib-1.2 ...

  6. Linux下Nginx编译安装后的开机自启动设置

    Linux下Nginx编译安装后的开机自启动设置 一.查看当前Nginx启动状态 二.而配置Nginx相关服务文件 三 .设置nginx命令 四.设置开机启动 五.测试开机启动 一.查看当前Nginx ...

  7. Linux下Nginx编译安装过程详解

    Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...

  8. 玩转mini2440开发板之【linux内核的编译和下载】

    今天首先来玩一玩linux内核的编译和下载. 1.背景交代 开发环境:64位的Ubuntu 14.04: 编译工具:arm-linux-gcc 4.4.3: 下载工具:SuperViVi USB Tr ...

  9. 编译 linux 3,linux内核的编译(3)

    linux内核的编译(3) 2008-02-23 07:17:46来源:互联网 阅读 () 无论什麽档名),然後将你做的 zImage 拷贝进去,(例如,如果你用" /vmlinuz ″ 的 ...

最新文章

  1. 10行 python 代码做出哪些酷炫的事情?
  2. 智能制造大潮下,机器视觉产业迎来春天?
  3. Apache Spark Jobs 性能调优
  4. python代码怎么运行-Python程序执行原理,python程序怎么运行的?
  5. android后台如何动态添加图片,android – 如何从JSON数组动态地向ImageView添加图像...
  6. vscode前端常用插件整理(vuejs)
  7. 【Nutch2.2.1基础教程之2.2】集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析
  8. 万字长文丨1分36秒,100亿,支付宝技术双11答卷:没有不可能
  9. linux下软件发布,Linux Kernel 5.12发布下载,附新特性及新功能介绍
  10. 教你10分钟内在Windows上完成Rails开发环境的安装和配置
  11. 转Java 开发环境配置
  12. 深入浅出MFC.pdf
  13. 极限编程和极限编程方法采用的有效的开发实践
  14. 步进电机、舵机、直流电机电机的原理
  15. 手动修改主用认证服务器地址,主用认证服务器地址
  16. IPSec:IKEv2协议详解
  17. 5菜鸟教程_【菜鸟手册7】如何在NVIDIA Jetson平台上安装Anaconda
  18. 光流传感器 定位精度_光流传感器其它方面的应用
  19. KW-Software MULTIPROG平台通过赫优讯cifX板卡实现 集成PROFIBUS-DP主站的软PLC控制器
  20. js常见面试题及简单回答

热门文章

  1. CMake 手册详解(二十二)
  2. ubuntu修改用户名、计算机名、主目录名
  3. cs8900a网卡驱动--寄存器
  4. 详细介绍Qt,ffmpeg 和SDl 教程之间的联系
  5. WINCE6开机进度条
  6. 【转】C++ 存储类
  7. 使用开源工具ELK可视化 Azure NSG日志
  8. Windows Workflow Foundation(WWF)介绍
  9. 格式化css文件,css文件格式化脚本的方法
  10. 【牛客 - 1080D】tokitsukaze and Event(最短路,思维)