建立makefile
一、目的
1.1 熟悉makefile的基本规则,学会建立自己的makefile,通过makefile提高编程效率
1.2 学会通过autotools建立makefile来更好更高效地管理软件项目工程
1.3 理解并熟悉下载、配置、安装标准软件包的流程、原理。
二、内容
2.1 手动建立makefile,包含3个.c源文件和1个.h头文件。其实,就makefile来讲,增加文件数量几乎不影响工作量和复杂度。
2.2 对同样的文件目录,通过automake创建makefile,生成压缩包,能够安装目标文件。
2.3 通过运行make,执行目标文件,检查手动和自动生成的makefile的正确性。
三、过程、结果与分析
3.1 makefile简介
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
3.2 实验准备
l 本次实验我一共建立了3个.c文件和2个.h文件,分别为main.c,fun1.c,fun2.c,fun1.h,fun2.h,函数内容为求圆的面积和周长,内容如下:
main.c
1 #include "fun1.h"
#include "fun2.h"
int main()
{
fun1();
fun1();
}
fun1.h
1 #ifndef __fun1__H__
#define __fun1__H__
extern void fun1(int x);
#endif
fun1.c
#include <stdio.h>
void fun1(int x)
{
printf("Aera of the circle is:f%\n",3.14*x*x);
}
fun2.h
1 #ifndef __fun2__H__
#define __fun2__H__
extern void fun2(int x);
#endif
fun2.c
1 #include <stdio.h>
void fun2(int x)
{
printf("Circumference of the circle is:f%\n",3.14**x);
}
l 安装automake,权限不足,加上sudo命令

3.3 手动建立makefile
l 建立makefile文件,内容如下:

l 执行make命令,自动编译链接,运行main可执行程序得到结果

3.4 Autotools自动生成makefile
l 运行autoscan名字自动扫描,生成configure.scan和autoscan.log两个文件

l 将configure.scan改名为configure.ac,内容如下:

l aclocal命令扫描configure.ac文件生成的aclocal.m4文件,获取autoconf创建configure所需的宏定义。
l autoconf命令读取configure.ac文件中的宏,生成configure脚本
l autoheader命令生成config.h.in文件

l 手工创建Makefile.am文件,文件内容如下
l 使用automake命令生成Makefile.in文件。--add-missing选项可以让automake自动添加必需的模版文件

l 使用configure命令把Makefile.in文件变成最终的Makefile文件

l Make dist生成压缩包

l 将压缩包拷贝到example文件夹下,解压

l ./configure生成makefile

l make测试目标文件是否正确
l make install进行可执行程序安装

l 执行可执行文件,结果正确
l 卸载可执行程序

建立makefile的更多相关文章
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- Linux就这个范儿 第8章 我是Makefile
Linux就这个范儿 第8章 我是Makefile P287 Makefile的作用就是——自动化编译,一旦写好,只需要一个make命令(解析Makefile,执行Makefile中描述的操作),整个 ...
- Makefile学习与进阶之Makefile.am和$$(M)的意思
(1)makefile 中,出现$$(M) 是什么意思,发现还是看实际的Makefile长知识啊 在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢 ...
- 运用Autoconf和Automake生成Makefile的学习之路
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- 1.Tarball软件make与makefile详解(还需要补充)
*通常自己安装的软件放在 /usr/local/软件名 中,而将源文件放在/usr/local/src *为安装到单独目录的软件之 man page 加入 man path 搜寻: 如果你安装的软 ...
- Makefile自动生成
automake/autoconf入门作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ...
- linux学习记录.6.vscode调试c makefile
参考 https://www.cnblogs.com/lidabo/p/5888997.html task有更新,不能使用文章的代码. 多文件 终端 touch main.c hw.c hw.h vs ...
- configure.*和Makefile.*之间的关系
现在很多项目都在使用GUI编译器,Kdevelop\Eclipse等等,诚然它给我们提供了极大地便利,但我们仍需要简单了解编译的过程.本文旨在简单叙述由源码(*.cpp & *.h)经过编译得 ...
- 关于makefile的生成原理以及make相关命令的使用
一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...
随机推荐
- JQuery的get、post、ajax方法
1.jQuery $.get() 方法 $.get() 方法通过 HTTP GET 请求从服务器上请求数据. jQuery.get( url, [data], [callback] ): 参数: ...
- 【算法笔记】B1019 数字黑洞
1019 数字黑洞 (20 分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直 ...
- 项目中git的使用
通常一个项目的开发周期相对较长,为了便于对过程中的项目版本进行管理,以及方便多人合作进行开发,常需要使用到版本管理控制软件,本篇介绍常用的版本控制器git,记之共享. 一.git是什么?有何特点? 用 ...
- [转] watch 命令使用(linux监控状态)
[From] https://jingyan.baidu.com/article/495ba841c5a31738b30eded4.html 可以使用watch 命令设置执行间隔,去反复间隔一条命令或 ...
- [转] Java 命令行交互-JCommander
[From] https://github.com/Sayi/sayi.github.com/issues/32 我喜欢简单,什么是简单?正如若干字符组成的命令行. 有时候我们用Java开发了一个小工 ...
- rsa字符串格式公钥转换python rsa库可识别的公钥形式
在爬虫分析的时候,经常在网页上看到如下格式的rsa公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21 ...
- 【车联网T-BOX】基于CANoe实现的远程服务业务自动化测试方案
为满足项目过程中不同阶段绝大部分测试需求,更方便快捷构造测试场景,支持异常场景测试.更早介入,不依赖周边ECU的稳定情况,专注于被测ECU.更经济,不加油,不充电,时间节省,物料节省等维度考虑.我们需 ...
- try-catch里面加了return后,finally还会执行吗?
请看下面的方法,在我们的catch里面,捕获到了异常之后,我们的catch模块里面的语句,还会接着执行,当我们执行到return之后,我们不会立即返回,而是会接着执行finally块里面的代码,只有执 ...
- 关于DES加密内部收费版
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...
- 【云计算】impala建表,文件关联,查询
[cloudil@hadoop164 caixianfeng]$ hdfs dfs -mkdir -p /csv-pig/tab1 /csv-pig/tab1 tab1.csv: 1,true,123 ...