本例假定要发生一个simserver1的软件包,源文件只要1个,simserver1.cpp。运用了pthread库。
1.运转autoscan扫描源码目录
履行
$autoscan
履行后生成configure.scan。
2.修改configure.in文件
过程1履行后生成了configure.scan,本过程需求仿制一份该文件并命名为configure.in,然后修改该文件。
指令如下:
$cp configure.scan configure.in
$vim configure.in
用vim修改器翻开后,文件原内容如下:
configure.scan开端
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([simserver1.cpp])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CXX
# Checks for libraries.
# FIXME: Replace `main’ with a function in `-lpthread’:
AC_CHECK_LIB([pthread], [main])
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h netinet/in.h sys/socket.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_HEADER_STDC
AC_CHECK_FUNCS([bzero inet_ntoa socket])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
configure.scan完毕
修改修改成如下内容:
configure.in开端
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_INIT(simserver1.cpp) #这个宏用来查看源代码地点的途径,放在文件最初
AM_INIT_AUTOMAKE(simserver1,1.0) #描绘软件包称号及版本号
# Checks for programs.
AC_PROG_CXX #运用C++
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h netinet/in.h sys/socket.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_HEADER_STDC
AC_CHECK_FUNCS([bzero inet_ntoa socket])
AC_OUTPUT(Makefile) #这个宏是咱们要输出的Makefile的姓名
configure.in完毕
3.运转aclocal生成aclocal.m4文件
configure.in文件修改保存完后,用aclocal指令生成aclocal.m4文件。
履行以下指令:
$aclocal
然后用ls列出生成的文件。假如没有找到aclocal.m4文件,那一般是configure.in文件不对,修改后再重试。
4.运转autoconf生成configure文件
用autoconf指令来生成configure可履行文件。
履行以下指令:
$autoconf
然后用ls查看configure是否现已成功生成。
5.树立Makefile.am文件
Makefile.am是用来生成Makefile.in的,需求你手艺书写。Makefile.am中界说了一些内容:
AUTOMAKE_OPTIONS
这个是automake的选项。在履行automake时,它会查看目录下是否存在规范GNU软件包中应具有的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。咱们将其设置成foreign时,automake会改用一般软件包的规范来查看。
bin_PROGRAMS
这个是指定咱们所要发生的可履行文件的文件名。假如你要发生多个可履行文件,那么在各个姓名间用空格离隔。
helloworld_SOURCES
这个是指定发生“helloworld”时所需求的源代码。假如它用到了多个源文件,那么请运用空格符号将它们离隔。比方需求 helloworld.h,helloworld.c那么请写成helloworld_SOURCES= helloworld.h helloworld.c。
假如你在bin_PROGRAMS界说了多个可履行文件,则对应每个可履行文件都要界说相对的filename_SOURCES。
LIBS
这个用来指定链接的程序库。如LIBS += -lpthread,指定链接pthread库。
履行指令:
$vim Makefilemam
进入修改界面,输入内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=simserver1 #软件包称号
simserver1_SOURCES=simserver1.cpp #源文件列表,假如有多个则用空格分隔
LIBS += -lpthread #链接pthread库
6.运转automake
履行automake –add-missing来发生Makefile.in。
$automake –add-missing
履行后应该生成Makefile.in文件.
7.运转configure生成Makefile
履行:
$./configure
8.履行make生成可履行文件
$make
履行后应该编译输出simserver1可履行文件.
make还有以下几个指令:
make install能够将simserver1安装到/usr/local/bin目录下;
make clean可铲除前次编译成果
make dist可将代码打包成packagename-ver.tar.gz文件
make distcheck用来查看打包的软件包是否正常。