基于《C++ cookbook》的示例文件使用autotool创建静态库及动态库复杂应用程序makefile

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DONGHUIB/article/details/51288451

网上已经有一些介绍使用automake生成静态链接库和动态链接库的方法。但随着autotools的升级,一些配置文件需要进行调整,现在就针对C++ cookbook的示例文件1-1~1-3的源文件介绍一下automake的实做方法。

     假设我们的项目根目录为myhello,下面有三个子目录georgeringojohnpaulhellobeatles,其中georgeringo目录包含*.cpp*.hpp,用来生成动态链接库。johnpaul目录下面有*.cpp*.hpp,用来生成静态链接库,hellobeatles目录下面含有hellobeatles.cpp用来调用其他两个库。

    实现的过程如下:

·          johnpaul目录下新建Makefile.am,文件内容和生成静态库一样。

AUTOMAKE_OPTIONS=foreign

noinst_LIBRARIES=libjohnpaul.a

libjohnpaul_a_SOURCES=john.cpp paul.cpp johnpaul.cpp

include_HEADERS=john.hpp paul.hpp johnpaul.hpp

·         georgeringo目录下新建Makefile.am文件,文件内容为:

ACLOCAL_AMFLAGS = -I m4

AUTOMAKE_OPTIONS=foreign

lib_LTLIBRARIES=libgeorgeringo.la

libgeorgeringo_la_SOURCES=george.cpp ringo.cpp georgeringo.cpp

include_HEADERS=george.hpp ringo.hpp georgeringo.hpp

·         hellobeatles目录下新建Makefile.am文件,文件内容为:

AUTOMAKE_OPTIONS=foreign

INCLUDES= -I../georgeringo/ -I../johnpaul/

bin_PROGRAMS=hellobeatles

hellobeatles_SOURCES=hellobeatles.cpp

hellobeatles_LDADD=-L../georgeringo/ -lgeorgeringo ../johnpaul/libjohnpaul.a

·         myhello3目录下运行autoscan命令,将configure.scan改为configure.ac文件,修改文件内容:

#                                              -*- Autoconf -*-

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

 

AC_PREREQ([2.69])

AC_INIT(hellobeatles,1.0)

AM_INIT_AUTOMAKE(hellobeatles,1.0)

AC_CONFIG_SRCDIR([config.h.in])

AC_CONFIG_HEADERS([config.h])

 

# Checks for programs.

AC_PROG_CXX

AC_PROG_CC

 

# Checks for libraries.

# FIXME: Replace `main' with a function in `-lgeorgeringo':

AC_CHECK_LIB([johnpaul], [main])

 

#AC_PROG_RANLIB

AC_PROG_LIBTOOL

LT_INIT

# Checks for header files.

 

# Checks for typedefs, structures, and compiler characteristics.

 

# Checks for library functions.

 

AC_CONFIG_MACRO_DIR([m4])

AC_CONFIG_FILES([hellobeatles/Makefile

                georgeringo/Makefile

                johnpaul/Makefile])

AC_CONFIG_SUBDIRS([georgeringo] [johnpaul] [hellobeatles])

AC_OUTPUT([Makefile])

          这里我同时加了AC_PROG_RANLIBAC_PROG_LIBTOOL,其实只需要加入AC_PROG_LIBTOOL即可,加入的AC_PROG_RANLIB其实也会被AC_PROG_LIBTOOL覆盖。加入LT_INIT。

l 运行autoreconf –vfi

l 运行configure

l 运行make

这时候 johnpaul georgeringo 目录下的库文件就生成了。 hellobeatles 下面就生成了可执行文件。

猜你喜欢

转载自blog.csdn.net/DONGHUIB/article/details/51288451
今日推荐