通过一个简单但经典、全面的例子教大家如何使用automake自动编译自己的工程。
automake通常用于大型工程的自动化编译,我们只需编写Makefile.am,它的规则比直接编写Makefile简单得多(Makefile不熟悉的要好好学习一下),而且也灵活的多。使得开发者只需关心代码逻辑,不必过于关心项目的编译配置。
automake流程图示如下:
核心配置如下:
configure.in:
AC_INIT([test], [1.0.0], [bugreport.test.com])
#指定项目名称和版本号
AM_INIT_AUTOMAKE(test, 1.0.0)
#检查编译器
AC_PROG_CC
AC_PROG_LIBTOOL
#输出Makefile文件
AC_CONFIG_FILES([
Makefile
lib/Makefile
])
AC_OUTPUT()
build.sh:(脚本说明了automake执行步骤及输出)
#!/bin/sh
# configure.in -> aclocal.m4
aclocal
# aclocal.m4 -> configure
autoconf
# avoid: required file `build/ltmain.sh' not found
# --copy copy files rather than symlinking them
# --debug enable verbose shell tracing
# --force replace existing files
libtoolize --automake --copy --force
# Makefile.am + configure.in -> Makefile.in
automake --add-missing
./configure
make
主目录Makefile.am:
AUTOMAKE_OPTIONS=foreign
#子目录
SUBDIRS = lib
#生成的可执行文件名
bin_PROGRAMS = test
#该可执行文件的源文件
test_SOURCES = test.c
#该可执行文件依赖的库文件
test_LDADD = lib/libcalc.la
lib目录下Makefile.am:
AUTOMAKE_OPTIONS=foreign
#生成的库文件的文件名
lib_LTLIBRARIES= libcalc.la
#该库文件源 头文件
noinst_HEADERS = calc.h
#该库文件源文件
libcalc_la_SOURCES = calc.c
代码如下:
lib目录下头文件calc.h:
#include <stdio.h>
int add(int a, int b);
lib目录函数实现calc.c:
#include "calc.h"
int add(int a, int b)
{
return a + b;
}
主目录下测试代码test.c:
#include <stdio.h>
#include "lib/calc.h"
int main(int argc, char** argv)
{
int sum = add(1, 2);
printf("sum:%d\n", sum);
return 0;
}
编译及执行结果:执行:
代码点此下载:automake.zip