一、目的

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的更多相关文章

  1. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  2. Linux就这个范儿 第8章 我是Makefile

    Linux就这个范儿 第8章 我是Makefile P287 Makefile的作用就是——自动化编译,一旦写好,只需要一个make命令(解析Makefile,执行Makefile中描述的操作),整个 ...

  3. Makefile学习与进阶之Makefile.am和$$(M)的意思

    (1)makefile 中,出现$$(M) 是什么意思,发现还是看实际的Makefile长知识啊 在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢 ...

  4. 运用Autoconf和Automake生成Makefile的学习之路

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  5. 1.Tarball软件make与makefile详解(还需要补充)

    *通常自己安装的软件放在 /usr/local/软件名   中,而将源文件放在/usr/local/src *为安装到单独目录的软件之 man page 加入 man path 搜寻: 如果你安装的软 ...

  6. Makefile自动生成

    automake/autoconf入门作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ...

  7. linux学习记录.6.vscode调试c makefile

    参考 https://www.cnblogs.com/lidabo/p/5888997.html task有更新,不能使用文章的代码. 多文件 终端 touch main.c hw.c hw.h vs ...

  8. configure.*和Makefile.*之间的关系

    现在很多项目都在使用GUI编译器,Kdevelop\Eclipse等等,诚然它给我们提供了极大地便利,但我们仍需要简单了解编译的过程.本文旨在简单叙述由源码(*.cpp & *.h)经过编译得 ...

  9. 关于makefile的生成原理以及make相关命令的使用

    一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...

随机推荐

  1. node.js调试方法

    第一种方式:node内置的调试器 在程序中添加debugger,然后在启动node程序时,使用debug模式启动 1.node debug my_event.js 2.使用node文档中各种命令,进行 ...

  2. ONTAK2010 Peaks加强版(离线&在线)

    题面 弱化版:luogu 强制在线版:bzoj 题解 本题有两种解法 离线算法:线段树合并 先看一道简单题[USACO18JAN]MooTube 本题就是在此基础上求第\(k\)高的点 首先把询问和路 ...

  3. 洛谷 P2053 [SCOI2007]修车(最小费用最大流)

    题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...

  4. Keras中间层输出的两种方式,即特征图可视化

    训练好的模型,想要输入中间层的特征图,有两种方式: 1. 通过model.get_layer的方式.创建新的模型,输出为你要的层的名字. 创建模型,debug状态可以看到模型中,base_model/ ...

  5. 基于iTop4412的FM收音机系统设计(一)

    说明:第一版架构为:APP+JNI(NDK)+Driver(linux),优点是开发简单,周期短,也作为自己的毕业设计 现在更新第二版,FM服务完全植入Android系统中,成为系统服务,架构为:AP ...

  6. Access computer files on iPad without using iTunes.

    going to my CSDN blog ---> https://blog.csdn.net/qq_37746801/article/details/89708103

  7. DataBind()方法实现数据绑定

    在为.aspx页上的对象设置了特定数据源之后,必须将数据绑定到这些数据源上.可以使用“Page.DataBind()”或“控件.DataBind()”方法将数据绑定到数据源上. 主要差别在于:调用Pa ...

  8. 《C++ Primer(第五版)》知识巩固

    运行平台:ubuntu 12.04/GCC 4.8.0 第二章:基本内置类型 1.decltype类型指示符 当我们从表达式的类型来推断要定义的类型时,可以使用decltype()来解析:declty ...

  9. Jmeter断言实例—响应断言

    断言有很多种,最最最常用的一种就是响应断言,目前我用的最多是这一种,下面列举一个运用响应断言的实例 对相应的请求添加断言 **Main sample and sub-samples:断言应用于主采样器 ...

  10. 【转】selenium自动化测试用例需要关注的几点(一)

    自动化测试设计简介  注:参看文章地址 我们在本章提供的信息,对自动化测试领域的新人和经验丰富的老手都是有用的.本篇中描述最常见的自动化测试类型, 还描述了可以增强您的自动化测试套件可维护性和扩展性的 ...