Automake支持三种目录层次:flat,shadow,deep
1.flat 所有的源文件及相关文件都放在顶层目录中。
2.shadow 主要的源文件存放在顶层目录中,其它的存放在各个子目录中。
3.deep 所有的源文件都分别存放在各个子目录中。
我的程序用了deep模式,所有的源文件都放在了src目录中。下面写一下automake生成Makefile的步骤:
1.运行autoscan命令,生成configure.scan。
configure.scan就是configure.in的模板,对它做一些修改,然后改名为configure.in或者configure.ac就可以了(新版本的automake好像是configure.ac)。
configure.in:
AC_INIT(src/openfetion.cpp) AM_INIT_AUTOMAKE(openfetion,0.1) AM_CONFIG_HEADER(config.h) AM_PATH_GTK_2_0(,,AC_MSG_ERROR(openfetion 0.1 needs GTK+ 2.0)) AM_PATH_XML2(,,AC_MSG_ERROR(openfetion 0.1 needs LIBXML2)) AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL AC_OUTPUT(src/Makefile)
其它的就不详细说了,需要的时候可以谷歌。
2.在顶层目录中创建一个Makefile.am,在其它各级需要的子目录中也创建Makefile.am。
我的顶层目录Makefile.am中只有下面几句话:
1 2 3 4 5 6 7 8 9 10 |
#子目录变量,用于递归处理各级子目录 SUBDIRS=src #安装路径,可使用./configure --prefix=/usr/local/openfetion修改 prefix=/usr/local #数据文件的安装路径 datadir=$(prefix)/skin #数据文件的具体内容,这里的意思是要将skin目录下的所有文件安装到/usr/local/skin中 data_DATA=skin/* #程序打包时要加入的其它文件,使用make dist生成tar.gz文件时会放进去的东西 EXTRA_DIST=skin |
src目录下的Makefile.am文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#libxml2 , GTK+2.0和GThread-2.0的cflags和libs #libxml2安装了xml2-config脚本,GTK+2.0和GThread-2.0安装了.pc pkg-config文件 AM_CPPFLAGS=`xml2-config --cflags` `pkg-config --cflags gtk+-2.0 gthread-2.0` AM_LDFLAGS=`xml2-config --libs` `pkg-config --libs gtk+-2.0 gthread-2.0` #预定义的目录,prefix已经说过了 prefix=/usr/local #这个是可执行文件安装的目录 bindir=$(prefix)/bin #这个是自定义的目录,用来安装包含协议实现部分的静态库的 slibdir=/usr/lib #编译生成可执行文件名称 bin_PROGRAMS=openfetion #这里必须以上一步定义的名称为前缀,编译openfetion所需要的源文件 openfetion_SOURCES=openfetion.cpp fetion_ui.cpp ... login_ui.cpp #编译openfetion所需要的库文件,libfx.a是我事先编译好了的。 openfetion_LDADD=libfx.a #这个变量前面也说了,要把下面这些文件打包放到tar.gz中 EXTRA_DIST= fetion_ui.h main_ui.h .... libfx.a #要安装的头文件,执行完make install后,这些文件将被安装到/usr/include里面 include_HEADERS= fgroup.h flogin.h ... common.h #自定义目录的数据文件,执行完make install后,这个文件就会被安装到/usr/lib里面 slib_DATA=libfx.a |
GNU Automake工具集的功能远不止这些,我了解地也不够深刻,继续学习。
转载自basic coder
本文链接地址: http://basiccoder.com/automake-introduction.html