Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830584
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2011-11-22 08:06:44

http://qhwang.blogbus.com/logs/46085293.html

基本步骤已在上一篇讲过,这里结合一个稍微复杂的例子来进一步降解。

建立一个程序目录: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 ...


阅读(1226) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~