阅读过《Linux下的Autoconf和AutoMake(理论篇)》之后,进入到实践环节。
实验环境:CentOS release 6.7 (Final) x64

1.检查一下这4个工具是否准备妥当(automake/autoconf/m4/perl),如果系统没有预安装的话则使用yum install进行安装。
下面列出本实验环境下的各软件版本,不同版本可能会存在不一致的情况。
automake (GNU automake) 1.11.1
autoconf (GNU Autoconf) 2.63
m4 (GNU M4) 1.4.13
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
ltmain.sh (GNU libtool) 2.2.6b #生成静态库的时候需要使用,本篇不使用

2.创建一个新的实验文件夹test_makefile,并进入该文件夹
命令:
mkdir test_makefile
cd test_makefile

3.创建一个mysqrt.c的源文件,代码如下(注意复制拷贝的代码是否完整):

#include<stdio.h>
#include<math.h>
int main()
{
  int i=0;
  printf("Please input an integer value:\n"); //提示输入一个整形的数
  scanf("%d",&i);
  printf("sqrt(%d)=%f\n",i,sqrt(i)); //这里需要链接到数学库-lm
}

————-以下开始configure的步骤————-

4.执行命令:autoscan
此时在test_makefile文件夹中生成文件configure.scan。

5.将configure.scan文件重命名为configure.in

6.修改configure.in文件内容
①修改前内容

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.63])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([mysqrt.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_CHECK_FUNCS([sqrt]) AC_OUTPUT

②修改后内容(注意复制拷贝的代码是否完整)

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.63]) #要求autoconf的版本
AC_INIT(mysqrt, 1.0, []) #修改里面的内容。FULL-PACKAGE-NAME:程序的名称 VERSION:版本 BUG-REPORT-ADDRESS:错误报告地址;(这里[]表示留空)
AM_INIT_AUTOMAKE(mysqrt,1.0) #增加这一行,是automake所必备宏,2个参数和以上的FULL-PACKAGE-NAME和VERSION一致
AC_CONFIG_SRCDIR([mysqrt.c]) #检查源文件是否存在
AC_CONFIG_HEADERS([config.h]) #生成config.h文件(由于不存在这个文件,后面需要使用autoheader命令来生成) # 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_CHECK_FUNCS([sqrt]) AC_OUTPUT(Makefile) #修改这一行,指定生成Makefile文件

7.执行命令:aclocal
生成文件aclocal.m4

8.执行命令:autoconf
生成文件configure

————-以上为生成文件configure的步骤————-

————-以下为生成文件Makefile.in的步骤————-
9.新增一个Makefile.am空文件,并增加如下内容:(注意复制拷贝的代码是否完整)

AUTOMAKE_OPTIONS=foreign  #设定automake的选项
bin_PROGRAMS=mysqrt #定义要产生应用程序的名称
mysqrt_SOURCES=mysqrt.c  #源文件以及头文件
mysqrt_LDADD=-lm  #数学库,可简写为LDADD=-lm

10.执行命令:autoheader
生成文件config.h.in

11.执行命令:

automake --add-missing

生成文件Makefile.in

————-以上为生成文件Makefile.in的步骤————-

12.到此处,所必须的Makefile.in文件和configure文件都准备完成了。
执行命令:./configure
生成文件Makefile

13.执行命令:make
生成执行文件mysqrt

14.执行应用程序:./mysqrt
输入一个整数,可得到正确的结果。

PS:
①修改configure.in或Makefile.am文件,切记重新走一次对应的流程
②修改头文件或源文件后,切记先make clean一次,再重新make

(转帖整理)Linux下的Autoconf和AutoMake(理论篇) 1

CentOS下的Autoconf和AutoMake(完善篇) 3

CentOS下的Autoconf和AutoMake(实践篇) 2的更多相关文章

  1. CentOS下的Autoconf和AutoMake(完善篇) 3

    在<实践篇>之后,由于需求不断修正,所以这篇是针对<实践篇>的一些完善.(以后内容会不定期增加完善) 1.不想链接到math的动态库,想连接到静态库①使用命令ldd ./mys ...

  2. (转帖整理)Linux下的Autoconf和AutoMake(理论篇) 1

    在搜索网上资料过程中,这是感觉最简洁有效的一篇文章,特进行转帖记录,并根据情况对部分内容进行了修改.原帖传送门:Linux下的Autoconf和AutoMake 1.工具安装在开始使用autoconf ...

  3. Linux下使用autoconf 和 automake 编译简单的HelloWorld

    使用过开源C/C++项目的同学都知道,标准的编译过程已经变成简单的三部曲:./configure /make/make install,使用起来很方便,不像平时自己写代码,要手写一堆复杂的makefi ...

  4. CentOS下搭建LAMP环境详解

    前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...

  5. CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5

    一.准备(把所有的源文件放在‘/home/yuanjun’目录下) apr http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz apr-util ...

  6. CentOS 下 安装 nginx 执行配置命令 ./configure 报错

    CentOS 下 安装 nginx 执行配置命令 ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx 时提示以下错误: checkin ...

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

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

  8. Linux centOS下搭建RTMP服务器的具体步骤

    以下的所需的安装包,可直接在linux系统终端下载,也可从其他地方下载之后拷到对应目录下解压使用,遇到连接不到国外网站时可改变压缩包地址 1.安装依赖包: #yum install glibc.i68 ...

  9. [Linux]CentOS下安装和使用tmux

    前天随意点开博客园,看到了一篇关于tmux的文章 Tmux - Linux从业者必备利器,特意还点进去看了.毕竟Linux对于做游戏服务端开发的我来说,太熟悉不过了.不过我就粗略地看了一眼,就关掉了. ...

随机推荐

  1. c++多个文件中如何共用一个全局变量

    例子: 头文件:state.h   源文件:state.cpp 其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使 ...

  2. js数组之迭代器方法

    迭代器方法:对数组中的每一个元素应用一个函数,可以返回一个值,一组值或者一个新的数组.说的什么啊这是,根本听不懂.实践 不生成新数组的迭代器的方法: <html> <head> ...

  3. [转]Visual C++ RunTime的特征——非烫即屯

    Visual C++ RunTime的特征——非烫即屯 大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之外的黑框里面跳出一排“烫烫烫烫烫”,当时就震惊了.你们能想象一个来自小城, 在大 ...

  4. zw版【转发·台湾nvp系列Delphi例程】HALCON Roberts2

    zw版[转发·台湾nvp系列Delphi例程]HALCON Roberts2 procedure TForm1.Button1Click(Sender: TObject);var op: HOpera ...

  5. js dom 操作技巧

    1.创建元素 创建元素:document.createElement() 使用document.createElement()可以创建新元素.这个方法只接受一个参数,即要创建元素的标签名.这个标签名在 ...

  6. POI Excel文件的读取与写入

    1. 创建目录 if(!(new File(path).isDirectory())){ new File(path).mkdirs();} 2. 读取Excel文件,并进行写入操作 Workbook ...

  7. Linux中Postfix邮件发送配置(三)

    部署DNS服务器 postfix根据域名和地址做一个MX记录,A记录,PTR记录(一般在互联网上邮件服务器都要反解,没有PTR记录会认为是垃圾邮件) $ service iptables stop $ ...

  8. 解决window.open被拦截问题

    最近在项目中有一个在浏览器中新开一个窗口的需求,如果不需要做任何的判断,只是直接新开窗口的话,用a标签即可. 但是如果需要做一些判断再新开一个窗口的话,就不能使用a标签了.window.open确实可 ...

  9. centos下nginx安装与配置

    nginx依赖以下模块: l  gzip模块需要 zlib 库 l  rewrite模块需要 pcre 库 l  ssl 功能需要openssl库 tar xzvf nginx-1.9.15.tar. ...

  10. 微信小程序编写新闻阅读列表

    微信小程序编写新闻阅读列表 不忘初心,方得始终:初心易得,始终难守. 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 ...