Linux下automake软件编译与发布快速入门
2008-01-13 10:27
399 查看
本例假设要产生一个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用来检查打包的软件包是否正常.
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用来检查打包的软件包是否正常.
相关文章推荐
- Linux下automake软件编译与发布快速入门
- Linux下automake软件编译与发布快速入门 (1)
- Linux下automake软件编译与发布之多级目录结构的处理
- Linux下automake软件编译与发布之多级目录结构的处理
- Linux下automake软件编译与发布之多级目录结构的处理
- Linux入门之源码编译安装配置apache---“风一样的软件安装“
- sinlinx独家发布Linux-Qt 之Linux软件的编译
- Linux 下的软件为什么很多需要编译,而不是直接发布二进制代码?
- Linux入门之源码编译安装配置apache---“风一样的软件安装“
- Linux Bash Shell快速入门
- (转载)Linux如何编译安装源码包软件
- 在Linux下使用STL快速入门
- 在64位Linux系统交叉编译32位软件:ffmpeg
- 官方发布的ThinkPHP3.1快速入门教程系列
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
- Linux Bash Shell快速入门
- Linux如何编译安装源码包软件
- Linux快速入门03-系统管理
- libusb编译与使用入门--arm linux (2011-07-24 22:16)
- LXC(Linux containers)快速入门