[置顶] autotools生成Makefile(二)

多个目录下的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就差不多了再见

 

你可能感兴趣的:(makefile,makefile,automake,autotools)