Makefile的automake生成(升级版)

环境:

Ubuntu 12.04.1 LTS

Autoconf 2.65

Automake 1.10.2

文件目录结构:

./
./include
./include/test/Test.h
./src
./src/test/Test.cpp
./app
./app/test/main.cpp


注:其中include目录放置头文件,src放置cpp文件,app放置要生成的可执行应用程序。

第一步:

    运行 autoscan , 自动创建两个文件: autoscan.log  configure.scan

第二步:

    修改configure.scan的文件名为configure.in,并修改configure.in的内容为:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])

#添加自动编译宏,automake必备
AM_INIT_AUTOMAKE(fzuir,1.0)

AC_PROG_CXX
AC_PROG_CC

#动态链接库,如果是静态链接库,使用AC_PROC_RANLIB
AC_PROG_LIBTOOL

#需要生成的Makefile
AC_CONFIG_FILES([Makefile
        include/Makefile
        src/test/Makefile
		src/Makefile
		app/test/Makefile
		app/Makefile
		])

AC_OUTPUT

第三

    运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义。

第四步:

    运行 autoconf, 目的是生成 configure。运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。

第五步:

    编写Makefile.am,根目录./下的Makefile.am内容为

SUBDIRS = include src app

注:SUBDIRS表示有子目录。

src下的Makefile.am内容为

SUBDIRS=test

#指定生成链接库的名称,注意:这里如果生成动态库,不能写为.so而要写成.la
lib_LTLIBRARIES = libfzuir.la 
#如果要生成静态库,应写为:
#lib_LIBRARIES = libfzuir.a
libfzuir_la_SOURCES = 
libfzuir_la_LIBADD = \
	test/libtest.la

 
 

src/test下到Makefile.am为

INCLUDES = -I $(top_srcdir)/include

noinst_LTLIBRARIES = libtest.la

libtest_la_SOURCES =	\
	Test.cpp

include下到Makefile.am内容为

#find . -name "*.h" | sed -e 's/^\.\///' | sed -e 's/^.*$/  & \\/' | sort
nobase_include_HEADERS = \
	test/Test.h

app下的Makefile.am内容为

SUBDIRS = test

app/test下的Makefile.am内容为

INCLUDES = -I ${top_srcdir}/include

bindir = ${exec_prefix}/fzuir/bin

#指定生成程序的名称
bin_PROGRAMS = test

#指定所需的源代码
test_SOURCES = \
    main.cpp

#指定所需的链接库文件
LDADD = \
    $(top_builddir)/src/libfzuir.la

第六步:

    运行automake --add-missing生存Makefile.in。但是碰到一些问题


guoguo@guoguo:~/workspace/fzuir2$ automake --add-missing
Useless use of /d modifier in transliteration operator at /usr/local/share/automake-1.10/Automake/Wrap.pm line 60.    【1】
configure.in:16: required file `./ltmain.sh' not found                                                                【2】
Makefile.am: required file `./NEWS' not found                                                                         【3】
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found

解决办法:

    1.第一个是因为automake1.10.2的一个bug,后面安装成1.11.3就没有那个提示了。

    2.第二个错误需要  运行libtoolize --automake --copy --debug --force

    3.那些提示not found,就建几个相应的文件。

第七步:

    运行./configure生成Makefile。

第八步:

    运行make编译。


你可能感兴趣的:(Makefile的automake生成(升级版))