automake应用示例

先来举一个简单的例子吧。如何写用code1.c, code2.c生成 prog1的configure.in和Makefile.am。
首先建立一个项目文件夹tt。在tt下建立dir1目录。
建立好这几个文件之后,下面就可以正式建立configure.in和Makefile.am了。
首先在tt目录下建立configure.in文件(可用autoscan):

#指定项目的一个源文件
AC_INIT(dir1/code2.c)

#指定项目名称和版本号
AM_INIT_AUTOMAKE(prog1, 0.0.1)

#检查编译器
AC_PROG_CC

#输出Makefile文件
AC_OUTPUT(Makefile
 dir1/Makefile
)

同时建立tt目录下的Makefile.am文件,这个文件很简单,就一句话:

SUBDIRS=dir1

然后建立dir1目录下的Makefile.am文件,这才是真正起作用的Makefile.am文件:

bin_PROGRAMS=prog1
prog1_SOURCES=code1.c code2.c

完成之后,为了方便操作,再写一个autogen.sh文件,保存在tt目录下。

#!/bin/sh
aclocal

autoconf

automake --add-missing

存盘之后,用chmod +x改成可执行文件。然后执行autogen.sh。

./autogen.sh

即可在tt目录下生成configure和makefile文件,同时在dir1目录下也会生成一个makefile文件。现在在tt目录下执行 make,进入dir1目录,就可以看到生成的prog1程序。如果再执行make install,prog1将被安装到缺省的/usr/local/bin目录下去。
=====================================================================
在此基础上,如果要同时实现code1.c, code2.c生成 prog1, 而 code3.c生成prog2。由于code1.c,code2.c,code3.c都在同一个目录,只要改写dir1目录下的Makefile.am就可以了。
bin_PROGRAMS=prog1 prog2
prog1_SOURCES=code1.c code2.c
prog2_SOURCES=code3.c
====================================================================
两个处在不同子目录下的文件共同生成一可执行文件.一般互相引用的源程序都是放在同一个目录下的,如果要放在不同的目录,可以把要引用的源文件编译成静态库文件。
修改tt目录下的configure.in文件。

#指定项目的一个源文件
AC_INIT(dir2/code4.c)

#指定项目名称和版本号
AM_INIT_AUTOMAKE(myproject, 0.0.1)

#检查编译器
AC_PROG_CC

#检查ranlib
AC_PROG_RANLIB

#输出Makefile文件
AC_OUTPUT(Makefile
 dir1/Makefile
 dir2/Makefile
)


同时修改tt目录下的Makefile.am文件。

SUBDIRS = dir1 dir2

在dir1目录下修改Makefile.am文件。这时是将code1.c编译成一个不安装(noinst)的静态库文件。

noinst_LIBRARIES=libcode1.a

libcode1_a_SOURCES=code1.c

在dir2目录下添加一个Makefile.am文件。

INCLUDES= -I../dir1
bin_PROGRAMS=prog4

prog4_SOURCES=code4.c
prog4_LDADD=../dir1/libcode1.a

然后执行autogen.sh就可以了。
===================================
指定可执行文件的安装目录。你只需要执行./configure --bindir=/usr/sbin就可以了。
==============================
gcc编译时加-lcrypt参数,库引用应该是在Makefile.am中写
LIBS = -lcrypt 
阅读更多
换一批

没有更多推荐了,返回首页