工程Makefile的编写,可以自己动手来写,也可以使用automake等工具来自动生成。下面还是以sort工程为例,对自动生成Makefle进行示例说明。 预备知识: 运用GNU Autoconf 及 Automake 这两套工具,可以自动生成Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把程序安装到系统中。 autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到 m4,便于生成脚本。 automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成 Makefile.in, automake还需用到perl。 工程sort,Makefile的生成,需要以下几步: 1) 运行autoscan命令 2) 将configure.scan 更名为configure.in,并修改configure.in文件 3) 在sort根目录下新建Makefile.am文件,并在各个模块子目录下也新建makefile.am文件 4) 在sort根目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件 5) 运行aclocal命令 6) 运行autoconf命令 7) 运行automake -a命令 8) 运行./confiugre,生成Makefile 准备工作: 安装automake。自动生成Makefile,需要编译环境安装有autoconf和automake,若没有安装,在ubuntu下可以这样来安装:
源文件: 本例工程,实现几种排序算法的具体代码实现和性能比较。工程原始文件结构如下: sort |-- main | |-- include | | |-- heap_sort.h | | |-- quick_sort.h | | `-- shell_sort.h | |-- libs | `-- src | `-- sort.c |-- heap_sort | |-- include | `-- src | `-- heap_sort.c |-- quick_sort | |-- include | `-- src | `-- quick_sort.c `-- shell_sort |-- include `-- src `-- shell_sort.c Let's do it! 首先进入sort根目录,状态如下:
运行autoscan
可以看到,文件夹下多出了两个文件:autoscan.log,configure.scan。之后,我们需要将configure.scan更名为configure.in,并进行更改:
更改后的文件,内容如下:
# -*- Autoconf -*- AC_PREREQ(2.61)
# AC_PREREQ:
# 初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址 AC_CONFIG_SRCDIR([heap_sort/src/heap_sort.c])
#如果需要调用静态库则添加AC_PROG_RANLIB,本例需添加 #如果需要调用动态库则添加AC_PROG_LIBTOOL,本例不需添加 # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_TIME # Checks for library functions. AC_CHECK_FUNCS([gettimeofday]) AC_OUTPUT([Makefile heap_sort/Makefile quick_sort/Makefile shell_sort/Makefile main/Makefile ]) 文件中,红色的为改动的内容。 在根目录下添加Makefile.am 文件:
Makefile.am的内容如下: SUBDIRS=quick_sort heap_sort shell_sort main INCLUDES=-I./include export INCLUDES 在main目录下添加Makefile.am 文件:
Makefile.am的内容如下: noinst_PROGRAMS=sort INCLUDES=-I./include sort_SOURCES=./src/sort.c sort_LDADD=$(top_srcdir)/heap_sort/libheap_sort.a / $(top_srcdir)/shell_sort/libshell_sort.a / $(top_srcdir)/quick_sort/libquick_sort.a 在heap_sort目录下添加Makefile.am 文件:
Makefile.am的内容如下: INCLUDES=-I./include noinst_LIBRARIES=libheap_sort.a libheap_sort_a_SOURCES=./src/heap_sort.c 在quick_sort目录下添加Makefile.am 文件:
Makefile.am的内容如下: INCLUDES=-I./include noinst_LIBRARIES=libquick_sort.a libquick_sort_a_SOURCES=./src/quick_sort.c 在shell_sort目录下添加Makefile.am 文件:
Makefile.am的内容如下: INCLUDES=-I./include noinst_LIBRARIES=libshell_sort.a libshell_sort_a_SOURCES=./src/shell_sort.c 在根目录下添加如下文件:NEWS,README,ChangeLog,AUTHORS,config.h.in:
这些文件的内容可以自己编写,我们这里文件内容均为空。
|
简单工程Makefile的自动生成
最新推荐文章于 2023-12-29 16:34:58 发布