automake使用详解

9 篇文章 0 订阅
1.生成动态库。
1)先写configure.in,用autoscan命令生成configure.scan,然后将其重命名为configure.in,并修改其中内容如下:
     #                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(SimulatorAdapter,1.0)
AM_INIT_AUTOMAKE(SimulatorAdapter,1.0)
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_LIBTOOL                           -》这一项是必须的

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_STRUCT_TM

# Checks for library functions.
AC_OUTPUT(Makefile \
      src/Makefile)

2) 编写Makefile.am,内容如下:
  Makefile.am可以如下写法:

include_HEADERS=myexpfunc.h //最终调用者所使用的动态库函数声明文件, 执行make install会将其在prefix目录下的include中

lib_LTLIBRARIES=libfoo.la
libfoo_la_LDFLAGS = -shared -avoid-version -module -no-undefined //可以指定下版本号,这样会生成libfoo.so.1.0.1 然后make install后会自动创建符号链接libfoo.so->libfoo.so.1.0.1

libfoo_la_SOURCES=src1.c src2.c

libfoo_la_LIBADD= //本动态库的第三方依赖库, 比如openssl 可以写为: -L /my_openssl_lib -lcrypto, 如果不依赖可以不写, 具体依赖目录可以在configure.in中编写--with参数指定

INCLUDES= //本动态库的第三方依赖头文件目录, 比如openssl可以写为: -I my_openssl_inc, 如果不依赖可以不写, 具体依赖目录可以在configure.in中编写--with参数指定

3) 然后执行下面脚本即可:
#!/bin/bash

aclocal 1>/dev/null 2>/dev/null
autoheader 1>/dev/null 2>/dev/null
automake 1>/dev/null 2>/dev/null
autoconf 1>/dev/null 2>/dev/null
automake --add-missing
mkdir build -p

echo "Please run configure under <build> ..."
echo -e "    like: \n\t../configure CPPFLAGS=\"-DDEBUG -Wall\""

2.生成静态库.
1)  执行autoscan 生成configure.scan 文件,将它重命名为configure.in 并修改其内容。
#configure.in
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(libhello.a,1.1,[])
AM_INIT_AUTOMAKE
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
AC_PROG_RANLIB//需要加入的内容,因为使用了静态库
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile])

***注解:
AC_INIT(FILE)
该宏用来检查源代码所在路径,autoscan 会自动产生,一般无须修改它。
AM_INIT_AUTOMAKE(PACKAGE,VERSION)
这个是使用 Automake 所必备的宏,PACKAGE 是所要产生软件的名称,VERSION 是版
本编号。也可以把包和版本号等信息放在AC_INIT(FILE) 宏里。
AC_PROG_CC
检查系统可用的C 编译器,若源代码是用C 写的就需要这个宏。
AC_OUTPUT(FILE)
设置 configure 所要产生的文件,若是Makefile ,configure 便会把它检查出来的结果
填充到Makefile.in 文件后产生合适的 Makefile。 后面的FILE 是一个Makefile 的输出列表,
你可以选着将要输出的Makefile 的位置和个数。建议只在src 中输出Makefile。


2)  
编写Makefile.am 文件
INCLUDES=include/
noinst_LIBRARIES=libhello.a
libhello_a_SOURCES=test.c
AUTOMAKE_OPTIONS=foreign
第一行noinst 表示生成的是静态库,不需要make install ,直接制定它的位置和名字就
可以使用。
第二行表示用来生成静态库的源文件。如果要把静态库生成到其他地方,可以在=后面
加上路径(建议用绝对路径,并将所要用到的静态库生成在同一个文件夹下,如lib)。
第三行AUTOMAKE_OPTIONS 是Automake 的选项。Automake 主要是帮助开发 GNU 软
件的人员来维护软件,所以在执行Automake 时,会检查目录下是否存在标准 GNU 软件中
应具备的文件,例如 'NEWS'、'AUTHOR'、 'ChangeLog' 等文件。设置为foreign 时,Automake
会改用一般软件的标准来检查。如果不加这句的话,需要在autoconf之前,先执行touch NEWS
README AUTHORS ChangeLog 来生成'NEWS'、'AUTHOR'、 'ChangeLog' 等文件


3)
然后执行下面脚本即可:
#!/bin/bash

aclocal 1>/dev/null 2>/dev/null
autoheader 1>/dev/null 2>/dev/null
automake 1>/dev/null 2>/dev/null
autoconf 1>/dev/null 2>/dev/null
automake --add-missing
mkdir build -p

echo "Please run configure under <build> ..."
echo -e "    like: \n\t../configure CPPFLAGS=\"-DDEBUG -Wall\""

3.生成可执行文件。
1),2),3)步骤同上,只是configure.in和Makefile.am有所差别,参考下列:
configure.in文件如下:
AC_INIT(Hello.cpp, 0.1)

AM_INIT_AUTOMAKE(Hello, 0.1)
AM_CONFIG_HEADER(config.h)
#AM_CONFIG_SRCDIR([Hello.cpp])

AC_LANG_CPLUSPLUS
AC_PROG_CC
#Checks for libraries
AC_CHECK_LIB([ACE],[TAO],[TAO_PortableServer],[TAO_CosNaming])
AC_PROG_RANLIB

#Checks for header files
AC_CHECK_HEADER(['/usr/local/include'])

AC_SUBST(['/usr/local/lib'])

AC_OUTPUT(Makefile src/Makefile)

***********************

Makefile.am如下:
bin_PROGRAMS = Hello

topdir = @top_srcdir@
srcdir = @srcdir@


AM_LDFLAGS = \
    $(all_libraries) \
    -lpthread \
    -L/opt/lib \

# The flags for compilers
#AM_CXXFLAGS = \
#    -DLOCAL_CONFIG \
#    -DTAO_NAMING_SERVICE

AM_CXXFLAGS = -g -Wall -O -rdynamic

# All the includes
INCLUDES = \
    -I/usr/include/libxml2 

Hello_SOURCES = \
    $(util_Sources) 

#common sources used
util_Sources = \
    StringHelper.cpp
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值