如何使用automake
-
安装(略)
-
使用步骤
-
autoscan then rename as configure.ac
这一步主要是用来扫描工程文件夹下的代码文件,生成configure.scan。这个文件中包含了能够自动搜索到的文件(例如.c文件,还有系统.h文件)。此外,生成的configure.scan文件中还会自动引入一个config.h文件,这里可以定义编译时需要的各种宏。如果不需要的话请在configure.scan中注释掉
-
aclocal
这一步用来生成aclocal.m4文件记载编译所用的宏(叫做m4宏),生成的根据是config.h的记载和系统平台的默认已有的宏。
-
autoconf
根据configure.ac(或者是configure.in)生成configure文件
-
CreateMakefile.am && automake
根据Makefile.am生成Makefile.in文件
-
./configure
生成Makefiel
-
make&& make install
编译安装
-
-
总结
用数字和字母概括主要步骤:a e a a c a
以autoscan开始,编辑(edit)configure.scan文件(重命名和添加删除内容),中间运行acloal和autoconf生成configure文件,创建(create)Makefile.am文件,用automake生成Makefile.in,最后编译。
-
实际应用
对于实际项目,会着重编写如下两种文件:configure.ac和Makefile.am
之所以说“种”是因为Makefile.am文件可能会有多个,每一个存放代码的路径下都会有一个Makefile.am。
configure.ac和Makefile.am会在代码中保留,再过程中生成的文件则需要删除掉,保持代码包的干净。为了使用方便,一般会有类似与autogen.sh这样的可执行脚本,用来代替手动输入命令,如:
aclocal libtoolize--copy -f autoconf automake--add-missing --copy --foreign
-
参考实例
configure.ac:
AC_INIT([mytest], [1.0.0], [haha@gogo.com]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) # Checks for programs. AC_PROG_CC # Checks for libraries. #PKG_CHECK_MODULES(PULSE, libpulse) #AC_SUBST(PULSE_LIBS) #AC_SUBST(PULSE_CFLAGS) # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([fcntl.h memory.h stdlib.h string.h sys/time.h unistd.h errno.h sys/types.h sys/stat.h]) AC_CHECK_HEADERS([pulse/pulseaudio.h], [], [AC_MSG_FAILURE([*** pulseaudio development header file not found.])]) # Configure the Makefiles AC_CONFIG_FILES([ Makefile src/Makefile mysub/src/Makefile ]) AC_OUTPUT
Makefile.am(作为子目录的索引的情况):
SUBDIRS = src \
mysub/src
Makefile.am (在代码目录下组织编译二进制的情况):
mytest_PROGRAMS = mybin
mybin_SOURCES = mybin_simple.c
mybin_testsuite_CFLAGS = $(OTHERLIB_CFLAGS)
mybin_testsuite_LDADD = $(OTHERLIB_LIBS)
mytest_PROGRAMS += my_another_bin
my_another_bin_SOURCES = mybin2.c
my_another_bin_CFLAGS = $(PLAYER_CFLAGS) \
$(GLIB_CFLAGS)
my_another_bin_LDADD = $(PLAYER_LIBS) \
$(GLIB_LIBS)
mytestdir = /opt/apathname/tool