【1】生成Makefile文件全过程

整体流程如下图:

注意:以下文件根目录为testmake(任意位置新建即可)

(1)测试程序

1.1 建立两个目录:mkdir include source

1.2 编辑sum.h文件

#cd include

#vim sum.h

内容如下:

#include <stdio.h>
int sum(int a, int b);

1.3 编辑sum.c文件

#cd source

#vim sum.c

内容如下:

#include "sum.h"  

int sum(int a, int b)
{
printf("\n----PRINT ARGS A: ----\n%d\n", a);
printf("\n----PRINT ARGS B: ----\n%d\n", b);
return (a + b);
} int main(int argc , char **argv)
{
int a = , b = ;
printf("Please INPUT ARGS A and B end by [ENTER]\n");
scanf("%d%d", &a, &b);
int value = sum(a, b);
printf("Execute SUM result: \n%d\n", value);
return ;
}

(2)autoscan

首先,执行autoscan命令,会生成autoscan.log 和 configure.scan两个文件,如下图:

然后,重命名并修改configure.scan文件

cp configure.scan configure.ac

修改内容详见注释部分:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.63])
# 修改点[]
# AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
# 修改后:
# FULL-PACKAGE-NAME 为程序名称,VERSION为当前版本, BUG-REPORT-ADDRESS为bug汇报地址
AC_INIT(sum, 1.0., kaizen@.com)
# 修改点[] 增加一行如下:
AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([source/sum.c])
#AC_CONFIG_HEADERS([config.h]) # Checks for programs.
AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. # 修改点[] 增加一行如下:
AC_CONFIG_FILES([Makefile]) AC_OUTPUT

如上

(3)aclocal

利用configure.ac文件,执行命令aclocal,会生成aclocal.m4 和 autom4te.cache两个文件,如下图:

重要的是aclocal.m4文件

(4)autoconf

利用aclocal.m4文件,执行命令autoconf,会生成configure文件,如下图:

(5)编写Makefile.am文件

内容如下:

#Makefile.am
bin_PROGRAMS = sum
sum_SOURCES = include/sum.h source/sum.c
sum_CPPFLAGS = -I include/

注意:sum为程序命名

如果将sum更改为demo,那么下面两个参数的前缀也需要对应更新,示例:

demo_SOURCES

demo_CPPFLAGS

(6)automake

首先,明确automake必需文件(9个)为:

install-sh  
missing  
INSTALL  
NEWS  
README  
AUTHORS  
ChangeLog  
COPYING  
depcomp

其中,命令automake -a会自动生成以下(5个)文件:

install-sh  
missing  
INSTALL  
COPYING  
depcomp

如下图:

然后,其他(4个)文件手动生成,命令:

touch NEWS README AUTHORS ChangeLog

如下图:

以上准备就绪。最后再执行automake命令,会生成Makefile.in文件,如下图:

(7)./configure

configure命令,利用configure和Makefile.in文件,生成Makefile文件。

(8)make

此时已经生成了sum(可执行文件名字在前面编写Makefile.am的参数时确定)这个,可以通过./sum直接看到运行结果。

如下图:

不过linux系统中一般这里都会再做一步,把它安装到系统里面,这样我们只要在终端输入sum就可以运行程序。

(9)make install

OK。现在直接可以在终端运行程序。如下图:

Good Good Study, Day Day Up.

顺序 选择 循环 总结

生成Makefile文件全过程的更多相关文章

  1. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

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

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

  3. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  4. 利用qmake生成Makefile文件

    在linux下写程序,免不了要写Makefile文件,用automake,总感觉比较麻烦,linux人喜欢做麻烦的事,以显得风格迥异. 其实用qmake生成Makefile文件相当简单. 1 装好qm ...

  5. 例解 autoconf 和 automake 生成 Makefile 文件

    本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法.主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置 Con ...

  6. 使用autoconf和automake生成Makefile文件(转)

    Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...

  7. 自动生成Makefile文件

    主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...

  8. 生成makefile文件编译源文件

    1.利用CodeBlock的cbp文件生成makefile文件 reverse@ubuntu:~/Desktop/CreateMakeFile$ ls cbp2make.linux-x86 freeg ...

  9. 使用autoconf与automake自动生成MakeFile文件

    automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...

随机推荐

  1. Qt json使用

    JSON 6 种基本数据类型 QJsonValue::Bool QJsonValue::Double QJsonValue::String QJsonValue::Array QJsonValue:: ...

  2. linux echo命令颜色显示

    echo命令颜色显示: echo:      -n:  不换行.      -e:让转移符生效. \t(tab) \n (换行) 实例: $ echo -e "\033[34mabcd\03 ...

  3. VMWare共享文件夹使用

    1. 先在windows中创建一个文件夹,使用英文名称. 2. VMWare中,菜单栏 虚拟机->设置 3. Linux中的访问目录  /mnt/hgfs/winshare winshare  ...

  4. Redis开启远程访问及密码

    一.开启远程访问 1.开放端口 firewall-cmd --zone=public --add-port=6379 firewall-cmd --zone=public --add-port=637 ...

  5. 三、python对字符串和集合的内存垃圾回收机制

    变量声明: name1 = "andy" name2 = name1   这个时候我把name1的值给改成了“tom”,问现在name2的值是什么?为什么? 答:andy,因为你把 ...

  6. 二、urllib库的使用详解

    一.urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2 是 ...

  7. 大数据技术原理与应用【第五讲】NoSQL数据库:5.6 文档数据库MongoDB

    文档数据库介于关系数据库和NoSql之间: 是最像关系数据库的一款产品,也是当前最热门的一款产品. 1.MongoDB简介:   1)     2)文档类型BSON(Binary JSON),结构类似 ...

  8. 和群友聊HashTable转到树和图的数据结构

    AVL树 前中后遍历 树的遍历深度和广度 树是一种特殊的图 人脉关系属于图数据结构: 并查集 最小生成树 union find 正常图的遍历用广度也能做,但是速度低: 并查集可以降到logn 数据小的 ...

  9. 为 Jupyter Notebook指定虚拟环境的 Python 解释器

    说明:本机系统为 win10 64 位, base 是集成于 Anaconda3 的 64 位的python,以下是创建虚拟环境 py366-32,安装 3.6.6 版的 32 为python,把 3 ...

  10. 目标检测论文解读3——Fast R-CNN

    背景 deep ConvNet兴起,VGG16应用在图像分类任务上表现良好,本文用VGG16来解决检测任务.SPP NET存在CNN层不能fine tuning的缺点,且之前的方法训练都是分为多个阶段 ...