多个目录下的autotools生成Makefile:
1.设计好目录以及源码(每个目录下都必须配置文件Makefile.am)
一、main.c目录下:
[root@localhost 2]# ls
include main.c Makefile.am src
[root@localhost 2]# cat main.c
#include <stdio.h>
int main(void)
{
printf("main\n");
add(4,2);
mul(4,2);
return 0;
}
[root@localhost 2]# cat Makefile.am
AUTOMAKE_OPTIONS=foreign //软件等级
SUBDIRS=src include //指定需要处理的子目录,如果要处理多个子目录,以空格隔开
CURRENTPATH=$(shell /bin/pwd) //利用pwd取得当前路径
INCLUDES=-I$(CURRENTPATH)/include //头文件路径
export INCLUDES //导出供子目录Makefile.am使用
bin_PROGRAMS=main //指定要产生的可执行文件名
main_SOURCES=main.c //指定产生可执行文件需要的源文件,如果有多个,以空格隔开
main_LDADD=$(CURRENTPATH)/src/libpro.a //连接库,也可以LIBS+=$(CURRENTPATH)/src/libpro.a 增加链接库
二、src目录下:
[root@localhost src]# pwd
/work/autotools/2/src
[root@localhost src]# ls
add.c Makefile.am mul.c
[root@localhost src]# cat add.c
#include <stdio.h>
void add(int a, int b)
{
printf("a+b = %d\n", a+b);
return ;
}
[root@localhost src]# cat mul.c
#include <stdio.h>
void mul(int a, int b)
{
printf("a*b = %d\n", a*b);
return ;
}
[root@localhost src]# cat Makefile.am
noinst_LIBRARIES=libpro.a //src目录下生产静态库libpro.a,以便顶层目录主文件链接使用
libpro_a_SOURCES=add.c mul.c //产生静态库所需要的源文件,以空格隔开
三、include目录下:
[root@localhost include]# ls
add.h Makefile.am mul.h
[root@localhost include]# cat add.h
#ifndef __ADD_H__
#define __ADD_H__
#include <stdio.h>
void add(int a, int b);
#endif
[root@localhost include]# cat mul.h
#ifndef __MUL_H__
#define __MUL_H__
#include <stdio.h>
void mul(int a, int b);
#endif
[root@localhost include]# cat Makefile.am
EXTRA_DIST=mul.h add.h //EXTRA_DIST表示用来定义要额外打包的文件名称
2.执行命令:autoscan
[root@localhost 2]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost 2]# ls
autoscan.log configure.scan include main.c Makefile.am src
3.编辑configure.scan
[root@localhost 1]# vim configure.scan
//只增加这2项:
AM_INIT_AUTOMAKE(main, 1.0)
AC_PROG_RANLIB //库--宏
[root@localhost 1]# mv configure.scan configure.in
4.aclocal
[root@localhost 1]# aclocal
生成aclocal.m4和autom4te.cache 文件
5.autoconf
[root@localhost 1]# autoconf
生成configure脚本
6.autoheader
[root@localhost 1]# autoheader
生成config.h.in
7.automake --add-missing
[root@localhost 2]# automake --add-missing
configure.in: installing `./install-sh'
configure.in: installing `./missing'
src/Makefile.am: installing `./depcomp'
生成 depcomp install-sh missing
8.运行configure
[root@localhost 2]# ./configure
生成 Makefile,config.log和config.status
9.make生成main可执行程序
[root@localhost 2]# make
生成main
10.运行可执行程序main
[root@localhost 2]# ./main
main
a+b = 6
a*b = 8
这样,autotools生成Makefile就差不多了