Linux automake自动编译全攻略

清泛原创

通过一个简单但经典、全面的例子教大家如何使用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

Linux automake 自动编译

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部