使用AutoTools自动生成Makefile-创新互联
前两天赶时间写了个简易的数据库系统,实现了简单的增删改查等功能。因为赶实验...无节操的我用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-创新互联
文章出自:http://ybzwz.com/article/dsoicd.html
这个图就是构建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-创新互联
文章出自:http://ybzwz.com/article/dsoicd.html