安装:sudo yum install automake
使用:
 1 运行autoscan生成两个文件:autoscan.log和configure.scan。将configure.scan重命名为configure.in。
   修改configure.in文件:

(1) 将AC_INIT中的参数进行填充,如:AC_INIT(hello,1.0,605841200@qq.com)

(2) 在#Check for programs注释前增加AM_INIT_AUTOMAKE(packet-name,packet-version),如:AM_INIT_AUTOMAKE(hello,1.0)

(3) 修改AC_OUTPUT为AC_OUTPUT(Makefile)或新增加AC_CONFIG_FILES(Makefile)

2 运行aclocal生成aclocal.m4文件和autom4te.cache文件夹

3 运行autoheader生成config.h.in文件

当我们的程序要使用一些与平台相关的库时,由于在不同的平台上同样功能的库名字、函数、头文件的不同等,为了使程序具有可移植性,我们经常会在程序中使用
一大堆的#ifdef或#ifndef预编译指令,这样非常地不方便。而autoheader就是解决这个问题的,在它生成的模板文件
config.h.in中,为这些库、函数、头文件等定义了#undef宏标志,configure脚本把它转换成config.h后,就会变
成#define宏标志,用作这些库、函数、头文件的保护符。这样,你可以在程序里包含这个config.h,然后使用其中的某些定义好的常量。

4 运行autoconf生成configure脚本文件

5 automake生成Makefile.in文件,需要手动创建Makefile.am后再执行automake --add-missing.
   Makefile.am内容
   AUTOMAKE_OPTIONS=foreign //有三个等级gnu foreign和gnits。
   bin_PROGRAMS=hello
   hello_SOURCES=hello.c

automake生成Makefile.in文件,添加参数--add-missing,会自动生成(install-sh missing depcomp INSTALL COPYING),

剩下的NEWS README AUTHORS ChangeLog要自己创建,使用gnu等级时,automake要求你必须拥有这9个文件,它们是

一个符合GNU规范的代码文件结构所必须的文件。
 6 ./configure生成Makefile文件,configure脚本会使用Makefile.in来创建Makefile文件,使用config.h.in来创建config.h文件,

并生成一个日志文件config.log。这样就完成了Makefile文件的制作,并且常常具有以下的功能:

make、 make install、make uninstall、make clean、make distclean、make dist。
 7 make编译源程序,默认执行make all
 8 ./hello看到程序的执行结果
 9 make install可以把程序安装到系统目录中
 10 make clean清除之前所编译的可执行文件及目标文件
 11 make dist 将程序和相关文件打包为一个压缩文档以供发布,如hello-1.0.tar.gz

使用automake生成动态库
安装:sudo yum install libtool
使用环境:c++(src(main.c),fun(Fun.h Fun.c))
 步骤:
 1 在fun目录下新建Makefile.am,内容为
   AUTOMAKE_OPTIONS=foreign
   lib_LTLIBRARIES=libfun.la
   libfun_la_SOURCES=Fun.h Fun.c
 2 在src目录下新建Makefile.am,内容为
   AUTOMAKE_OPTIONS=foreign
   INCLUDES=-I../fun/
   bin_PROGRAMS=main
   main_SOURCES=main.c
   main_LDADD=-L../fun -lfun
    3 在c++目录下运行autoscan生成configure.scan,改名为configure.in并修改其内容
   修改AC_INIT(main,1.0) AC_OUTPUT([Makefile])
   增加AM_INIT_AUTOMAKE AC_PROG_LIBTOOL
 4 运行aclocal
 5 运行libtoolize -f -c
 6 运行autoconf
 7 运行autoheader
 8 在c++目录下新建Makefile.am,内容为
   AUTOMAKE_OPTIONS=foreign
   SUBDIRS=fun src
 9 运行automake -a 会在三个文件夹下均生成Makefile.in文件
 10 在c++目录下运行./configure 生成Makefile文件
 11 运行make,这时候在fun和src目录下就生成了相应的动态链接库和可执行程序了
使用automake生成静态库
使用环境同上
步骤同上。
差别:改变宏AC_PROG_RANLIB表明生成的是静态库AC_PROG_LIBTOOL表示生成的是动态库
      修改src目录下的Makefile.am中的main_LDADD=../fun/libfun.a
      修改fun目录下的Makefile.am内容为:
   lib_LIBRARIES=libfun.a
   libfun_a_SOURCES=Fun.h Fun.cpp
   执行命令和顺序不变,不再执行libtoolize -f -c

Makefile生成的更多相关文章

  1. Ubuntu下通过makefile生成静态库和动态库简单实例

    本文转自http://blog.csdn.net/fengbingchun/article/details/17994489 Ubuntu环境:14.04 首先创建一个test_makefile_gc ...

  2. Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明【转】

    转自:https://blog.csdn.net/qq1452008/article/details/50855810 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  3. Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明

    1. 为什么要使用后缀名为 .d 的依赖文件? 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件.比如main.c 源文件内容如下: #include "stdio.h& ...

  4. makefile生成静态库和动态库

    库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...

  5. Makefile 7——自动生成依赖关系 三颗星

    后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上“objs/”前缀.gcc的-E选项, ...

  6. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  7. 一个通用的Makefile (转)

    据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考.       ...

  8. linux C编程之makefile

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

  9. Linux Makefile analysis for plain usr

    一.本文主旨 笔者写了一篇linux内核Makefile整体分析 ,测重于理论分析,对于实际应用不算对头,所以需要写一篇实用性较强的文章,为以后内核.驱动移植做好铺垫. 二.本文内容概要 1.编译哪些 ...

随机推荐

  1. CMA内存管理子系统

    转:http://www.wowotech.net/memory_management/cma.html 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. ...

  2. P4121 [WC2005]双面棋盘

    题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中 ...

  3. Redis之数据存储结构

    今天去中关村软件园面试,被问到:你做项目用到的Redis处理数据用的什么结构?顿时石化,”用到的结构,不就是key-value嘛,还有什么结构?“.面试官说:“平时除了工作,要加强学习,下面的面试我觉 ...

  4. Windos Server 2008 FTP 服务安装

    安装服务:FTP 系统环境:Windos 2008 R2 x64 安装FTP服务 管理-->角色-->添加角色-->Web 服务器 IIS 测试

  5. 20145240 《Java程序设计》第五周学习总结

    20145240 <Java程序设计>第五周学习总结 教材学习内容总结 语法与继承结构 8.1.1使用try.catch java中所有的错误都会被打包为对象,并提供了特有的语句进行处理. ...

  6. MIPI DBI\DPI\DSI简介【转】

    本文转载自:http://blog.csdn.net/longxiaowu/article/details/24249971 (1)DBI接口 A,也就是通常所讲的MCU借口,俗称80 system接 ...

  7. poj 1905 Expanding Rods(木杆的膨胀)【数学计算+二分枚举】

                                                                                                         ...

  8. Myeclipse 快捷键使用

    MyEclipse快捷键大全-------------------------------------MyEclipse 快捷键1(CTRL)----------------------------- ...

  9. IOS 被拒 关于 iPhone running iOS 10.3.1 on Wi-Fi connected to an IPv6 network.

    问题: Guideline 2.1 - Performance Thank you for your resubmission. However, we discovered one or more ...

  10. Android 实现http通信(servlet做服务器端) HttpClient、HttpURLConnection实现登录验证

    一,写好服务器端 在eclipse或其它javaee开发工具中新建一个web项目(我这里的项目名是:Android),建一个servlet(我这里的servlet名是:LoginServlet),模拟 ...