安装: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. HttpUtils工具类

    HttpUtils工具类 package net.hs.itn.teng.common.util; import java.io.IOException; import java.io.Unsuppo ...

  2. 关于Pytorch的二维tensor的gather和scatter_操作用法分析

    看得不明不白(我在下一篇中写了如何理解gather的用法) gather是一个比较复杂的操作,对一个2维tensor,输出的每个元素如下: out[i][j] = input[index[i][j]] ...

  3. java resources 红叉 Cannot change version of project facet Dynamic Web Module to 2.5

    在使用maven导入项目的时候,markers提示Cannot change version of project facet Dynamic Web Module to 2.5,不能将工程转换为2. ...

  4. Windows 2012 系统汉化

    远程登录服务器 控制面板,选择“语言” (Windows 2012 自带的语言包 ) 此处需要等待 安装完成,选择中文 重启后 应该就不需要做其他的操作了

  5. MyBatis联合查询association使用

    1.需求 两张表 channels(频道表)  member(会员表) 频道表里面有会员id,查询频道列表的时候需要关联查询出会员的名称,头像等信息 . 2.channels.xml定义,配置主要在这 ...

  6. HDU 3473 Minimum Sum (划分树求区间第k大带求和)(转)

    题意:在区间中找一个数,求出该区间每个数与这个数距离的总和,使其最小 找的数字是中位数(若是偶数个,则中间随便哪个都可)接着找到该区间比此数大的数的总和 区间中位数可以使用划分树,然后在其中记录:每层 ...

  7. QT 创建主窗口 MainWindow 实例

    1. 2. mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include & ...

  8. review07

    java类可以有两种重要的成员:成员变量和方法,实际上java还允许有一种成员:内部类.内部类是在一个类中定义另一个类.内部类和外嵌类的关系如下: (1)内部类的外嵌类的成员变量在内部类中仍然有效,内 ...

  9. 我总结的js变量、数组、对象等基础知识

    我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...

  10. 目标检测 — 计算IOU

    1.IOU=交集/并集 #include<iostream> #include<algorithm> #include<stdio.h> #include < ...