前两天赶时间写了个简易的数据库系统,实现了简单的增删改查等功能。因为赶实验...无节操的我用shell实现的文件读写...咳咳...这都不是重点,重点是自己写Makefile感觉有点不伦不类...虽然多文件,但是结构什么的安排也不好...正巧看书有提到过自动化工具,一下心血来潮,何不自动构建一个Makefile呢?

于是苦比的一晚上拉开了序幕...


这个图就是构建Makefile的过程了(有一些错误),下面我还是结合自己的例子来记录一下过程,并简单的整理下。源码就使用我的DBMS来说明了,源码结构如下:

下载:百度网盘

再提供个构建完成的吧:网盘

简单的说明下:

data文件夹存放的是我的程序执行过程中生成的数据库和临时文件,doc存放帮助文档,include文件夹存放头文件,lib文件夹存放.c文件,生成libdbms.a静态库,src存放主程序文件

那个example.flex请先无视...是用flex简单构造的一个词法分析...

为了构建一个Makefile,并且通过.configure make 生成可执行文件。我们需要在根目录及拥有源码的子目录分别建立一个Makefile.am文件


根目录Makefile.am:

[shell]
SUBDIRS=lib src
[/shell]

src/Makefile.am

[shell]
AUTOMAKE_OPTIONS=foreign
INCLUDES= -I../include
noinst_PROGRAMS=main
main_SOURCES=main.c
main_LDADD=../lib/libdbms.a
[/shell]

lib/Makefile.am

[shell]
AUTOMAKE_OPTIONS=foreign
INCLUDES= -I../include
noinst_LIBRARIES=libdbms.a
libdbms_a_SOURCES=AlterTable.c CreateUser.c Desc.c DropView.c Insert.c Revoke.c CreateIndex.c CreateView.c DropIndex.c Grant.c Select.c CreateTable.c Delete.c DropTable.c  Help.c Update.c lex.yy.c
[/shell]


过程:(想要学习auto系列工具的细则参考相关说明文档,本过程重在记录,演示)

(0)创建好上面说的.am文件,在根目录创建这几个文件NEWS README AUTHORS ChangeLog(其实在根目录的Makefile.am文件中加入AUTOMAKE_OPTIONS=foreign就可以不创建这几个文件的,但是个人还是很喜欢这个的,因为下载的开源程序源码都是这样的..高大上...你懂得)

(1)使用autoscan命令生成configure.scan,复制configure.scan为configure.ac(以前版本的为configure.in)

(2)使用编辑器编辑configure.ac

[shell]

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([src/main lib/libdbms.a], [1.0], [sinxxxxxxx@163.com])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([include/head.h])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.
AC_PROG_RANLIB

# Checks for header files.
AC_CHECK_HEADERS([inttypes.h memory.h stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_INT8_T
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT8_T

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([memset])

AC_CONFIG_FILES([Makefile
lib/Makefile
src/Makefile])
AC_OUTPUT

[/shell]

这里说一下需要修改的地方:

AC_INIT - 修改里面的参数

AM_INIT_AUTOMAKE - 调用automake(新增)

AC_PROG_RANLIB - 增加库支持(新增)

其它的貌似不用修改了~OK~~可以Go on 了

(3)执行aclocal生成m4文件

(4)执行autoconf生成configure

(5)执行autoheader

(6)执行automake --add-missing生成Makefile.in文件(上面的图片写的是Configure.in文件,版本问题?)

(7)执行./configure进行配置,生成Makefile

(8)make进行编译,没有错误的话进入src文件夹是不是有个“main”程序躺在那里呢~~

嗯...

今天就先记录到这里。

得休息去了

有时间再弄一下打包~~

参考链接:

http://zhmy.michael.blog.163.com/blog/static/86157879201111282208534/

http://yinzhezq.blog.163.com/blog/static/16486289020129835921848/

使用AutoTools自动生成Makefile的更多相关文章

  1. 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)

    转自:http://blog.csdn.net/longerzone/article/details/12705507 一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在 ...

  2. GNU autotools自动生成Makefile 介绍

    一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...

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

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

  4. 7、使用autotools自动产生makefile

    通过之前的学习可以知道,makefile拥有复杂的语法结构,编写与维护都不是很方便于是设计出了专门用来生成Makefile的autotools工具,以减轻制作makefile文件的负担. 自主软件主要 ...

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

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

  6. 自动生成Makefile时,关于Makefile.am编写

    最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含.以前写过编译这样组织的源码的makefile,所以这次也就直接写了. 确实因为各个文件间的头文件互相包含,造 ...

  7. 手把手教你自动生成Makefile

    概述:autoconf/automake工具用于自动创建功能完善的Makefile文件,接下来简单介绍一下,如何使用上述工具 自动生成Makefile 前提:安装autoconf工具(ubuntu:s ...

  8. 自动生成 Makefile (automake/autoconf 入门)

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

  9. 自动生成makefile

    原文  http://www.laruence.com/2009/11/18/1154.html 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实 ...

随机推荐

  1. SQL入门学习4-复杂查询

    5-1 视图 视图和表 视图和表的区别只有一个是否保存了实际的数据 使用INSERT和SELECT实际上就是从存储设备中读取数据,各种计算后,将数据呈现给用户. 视图不会将数据保存在存储设备中.实际上 ...

  2. WCF搭建

    WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储.领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再项目搭建的过程中慢慢引入,博主的思路是先将整个架构走通,然后一 ...

  3. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  4. NSIS:使用FileFunc.nsh头文件判断文件版本

    原文 NSIS:使用FileFunc.nsh头文件判断文件版本 这里,轻狂拿WMP10做一个例子.关于WMP10的原始安装文件,可以下载后通过/C /T:D:\Windows Media Player ...

  5. JavaEE(18) - JPA原生SQL查询和存储过程

    1. 使用原生SQL执行查询 2. 映射原生SQL查询的结果集 3. 使用原生SQL查询执行实体查询 4. 命名原生SQL查询 5. 在JPQL查询中调用存储过程

  6. C编程的指针涛 ---第十笔记

    //指针实例搜索算法 //迷宫算法 //搜索是最长的使用深度优先搜索和广度优先搜索 //作为名称作为一个深度优先搜索,每路一直在寻找到底. //为了防止想法,这样的数据结构 //使得每次找到思路的时候 ...

  7. 数字使用相应的加密策略传递一个字符串后Java实现代码

    公司采用公用电话传递数据,数据小于8整数位,为了确保安全,     在转移的过程中需要加密,加密规则如下面的:         第一个数据下降,附图然后各加5,和除以10的余数取代该数字,       ...

  8. oracle_利用闪回功能恢复数据

    方便起见一般:执行如下即可不用往下看: ① 启用行移动功能 alter table tbl_a enable row movement; ② 闪回表数据到某个时间点 flashback table t ...

  9. UVA Don't Get Rooked

    主题如以下:  Don't Get Rooked  In chess, the rook is a piece that can move any number of squaresverticall ...

  10. mysql_navicat_快捷键

    快捷键能节省很多时间,之前一直研究oracle,plsql有自定义自动补全, 比如 sf 直接回车 可以出现 select * from 等等(参照http://www.cnblogs.com/cph ...