automake生成静态库文件_[转载]用automake生成动态库,静态库以及可执行文件

本文介绍了使用Automake生成动态库、静态库和可执行文件的方法。生成动态库需编写configure.in和Makefile.am并执行脚本;生成静态库同样要修改configure.in和编写Makefile.am后执行脚本;生成可执行文件步骤类似,但configure.in和Makefile.am内容有差别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ..."

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 ..."

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值