建立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 ...
随机推荐
- springMVC中一些功能
1.controller的生命周期 spring框架默认为单例模式,会使数据之间的传递互相影响,而springMVC给我们提供了request与session两个,request每次请求就会产生一个单 ...
- LSTM时间序列预测学习
一.文件准备工作 下载好的例程序 二.开始运行 1.在程序所在目录中(chapter_15)打开终端 输入下面的指令运行 python train_lstm.py 此时出现了报错提示没有安装mat ...
- apache2 + django 路径问题
问题: 在代码中使用sys.path.append(), 添加模块路径后,仍然报错找不到包. 虽然在LD_LIBRARY_PATH中配置了.so文件打路径,仍然报错找不到. 原因: 检查apahce2 ...
- Kettle 中生成随机数 或者GUID唯一标识符
添加步骤 "生成随机数" 英文名字叫 "Generate Random Value" 如下图..选择UUID..
- 使用not in的子查询
operand comparison_operator [NOT] in (subquery) =ANY运算符与IN等效 !=ALL或<>ALL运算符与NOT IN 等效 如果子查询返回任 ...
- 权重平等分布局And TableRow布局误区
开头语: 本人最近在自学Android,虽然本人有2年Java Web的开发经验.但是发现Android的自学之路并不是那么平坦,我没有Android真机.但是有一个window phone的手机.开 ...
- 转 Unity企业级支持案例与分析
Unity大中华区技术支持总监张黎明以“Unity企业级支持案例与分析”为主题进行了分享. 以下为演讲实录: 张黎明:非常感谢大家来参加今年的Unite,其实我现在看到有的朋友已经不是第一次来参加Un ...
- PyCharm鼠标右键不显示Run unittest方法
PyCharm鼠标右键不显示Run unittest方法 PyCharm是一个用来写python代码的IDE,很好用.在其中建立了unittest类后,鼠标点击某个test方法后,菜单中会显示Run ...
- MySql的数据目录
数据目录的位置 MySQL数据目录的默认位置已经被编译到MySQL服务器程序里了. 在启动服务器时,通过使用一个--datadir=dir_name选项可以明确指定数据目录位置.把MySQL数据目录安 ...
- RabbitMQ入门-理论
目录 RabbitMQ简介 RabbitMQ原理简介 RabbitMQ安装 .NET Core 使用 RabbitMQ Hello World 工作队列 扇型交换机 直连交换机 主题交换机 远程过程调 ...