分类: C/C++
2011-11-22 08:06:44
基本步骤已在上一篇讲过,这里结合一个稍微复杂的例子来进一步降解。
建立一个程序目录:test,然后按如下目录结构建立相关文件
test
|
|---- src
| |---- main
| | |---- main.c
| |
| |---- myadd
| | |---- myadd.c
| |
| |---- swap
| |---- swap.c
|
|---- include
|---- swap.h
|---- myadd.h
各文件内容如下:
/* ### src/main/main.c ### */
#include
#include "swap.h"
#include "myadd.h"
int main()
{
int a = 10;
int b = 20;
int sum = 0;
printf("a is: %d, b is: %d\n",a,b);
swap(&a,&b);
printf("after swap,a is: %d, b is: %d\n",a,b);
printf("start to run myadd(a,b)\n");
sum = myadd(a,b);
printf("a+b=%d\n",sum);
}
/* ### include/myadd.h ### */
#include
int myadd(int a, int b)
{
return (a+b);
}
/* ### include/swap.h ### */
#include
void swap(int *a, int *b)
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
/* ### include/myadd.h ### */
#include
void myadd(int,int);
/* ### include/swap.h ### */
#include
void swap(int*,int*);
生成Makefile要求:将swap链接为静态库,将myadd链接为动态库
>autoscan
修改configure.scan为configure.in,编辑内容(基本和前面相同,只需添加两句)
# AC_PROG_RANLIB ### Added if static libary used
AC_PROG_LIBTOOL ### Added if dynamic libary used
# Checks for typedefs, structures, and compiler characteristics.
# AC_C_CONST(这里不需要)
然后修改AC_OUTPUT为
# Checks for library functions.
AC_OUTPUT(Makefile ### Added
include/Makefile
src/main/Makefile
src/swap/Makefile
src/myadd/Makefile
)
上述makefile没有生成顺序
接着执行下面的命令
>aclocal
>libtoolize
>autoheader
>autoconf
注:只有用到动态库时,才需要 >libtoolize
然后我们写 Makefile.am
/* ### Makefile.am ### */
SUBDIRS = include src/swap src/myadd src/main //这个有先后顺序
/* ### include/Makefile.am ### */
helloincludedir=$(includedir)
helloinclude_HEADERS=swap.h myadd.h
/* ### src/main/Makefile.am ### */
bin_PROGRAMS=test
test_SOURCES=main.c
test_LDADD=$(top_srcdir)/src/swap/libswap.a
LIBS=-lmyadd
INCLUDES=-I$(top_srcdir)/include
test_LDFLAGS=-L$(top_srcdir)/src/myadd
/* ### src/swap/Makefile.am ### */
noinst_LIBRARIES=libswap.a
libswap_a_SOURCES=swap.c
INCLUDES=-I$(top_srcdir)/include
/* ### src/myadd/Makefile.am ### */
lib_LTLIBRARIES=libmyadd.la
libmyadd_la_SOURCES=myadd.c
INCLUDES=-I$(top_srcdir)/include
接着 automake 的话,无法通过的,还需要下面几个文件,我们暂时 touch 一下即可
>touch README NEWS AUTHORS ChangeLog
注意是在 $(top_srcdir) 目录下面
然后
>automake --add-missing
>./configure
至此,所有 Makefile 文件应该全部生成
我们可以执行
>make
>make clean
>make install
>make uninstall
>make dist
>make ...