使用autotools小結

一、autotools使用步驟

autoscan #掃面當前目錄、源文件,生成configure.scan文件,重命名爲configure.ac
Makefile.am#手動創建Makefile.am並編輯
libtoolize -f -c# 注意:僅僅在生成動態庫時使用
aclocal #根據configure.in生成aclocal.m4文件以及autom4te.cache文件夾
autoheader #生成配置頭文件的模板config.h.in
touch README NEWS AUTHORS ChangeLog #生成一些聲明性文件
autoconf #根據configure.in和aclocal.m4來產生configure文件
automake --add-missing #生成Makefiel.in和所需要的腳本
./configure #通過--prefix=設置安裝目錄
make
make install 安裝 將編譯成功的可執行文件安裝到系統目錄中,一般爲/usr/local/bin目錄
make uninstall #卸載
make clean#清除上次的make命令所產生的object文件(後綴爲“.o”的文件)及可執行文件
make dist #製作發佈的軟件包
make distcheck #生成發佈軟件包並對其進行測試檢查,以確定發佈包的正確性。這個操作將自動把壓縮包文件解開,然後執行configure命令,並且執行make,來確認編譯不出現錯誤。
make distclean#類似make clean,但同時也將configure生成的文件全部刪除掉,包括Makefile文件

備註:

 修改了configure.ac,需程序執行aclocal、autoconf、automake --add-missing
 修改了Makefile.am,需程序執行automake --add-missing

二、編譯可執行程序

三、編譯靜態庫

四、編譯動態庫

進入代碼目錄
$ autoscan
$ mv configure.scan configure.ac
$ vim configure.ac
編輯configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT(xxx.so, 1.0.0, email address) 
AC_CONFIG_SRCDIR([xxx.h])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([subdir-objects])	### 新增

AC_CONFIG_MACRO_DIR([m4])  ### 新增,根據 libtoolize -f -c 執行結果提示新增

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_LIBTOOL  ### 新增,生成動態庫必須

# Checks for libraries.
# FIXME: Replace `main' with a function in `-lcrypto':
AC_CHECK_LIB([crypto], [main])
# FIXME: Replace `main' with a function in `-lssl':
AC_CHECK_LIB([ssl], [main])
# FIXME: Replace `main' with a function in `-lz':
AC_CHECK_LIB([z], [main])

# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h inttypes.h limits.h locale.h memory.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h strings.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_FUNC_STRERROR_R
AC_FUNC_STRTOD
AC_CHECK_FUNCS([ftime gethostbyname gettimeofday localtime_r memset select socket strchr strerror strstr])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
編寫Makefile.am
Makefile.am
AUTOMAKE_OPTIONS = foreign
lib_LTLIBRARIES = xxx.la
xxx_la_SOURCES =
xxx_la_LIBADD =   -lcrypto -lssl -lz
xxx_la_DEPENDENCIES	=
xxx_la_LDFLAGS= -shared -fPIC -version-number 1:0:0	### 動態庫編譯完成 libtool 自動對對庫創建軟鏈接; 執行make install時,libtool 自動對對庫創建軟鏈接
xxx_la_CFLAGS =  -Wall -O2  -pedantic -Wextra  -DWITH_OPENSSL -DWITH_DOM -DWITH_NO_C_LOCALE -I./ 
xxx_la_CPPFLAGS = -Wall -O2 -std=c++11 -pedantic -Wextra -DWITH_OPENSSL -DWITH_DOM -DWITH_NO_C_LOCALE -I./

ACLOCAL_AMFLAGS=-I m4 		 ### 根據 libtoolize -f -c 執行結果提示新增

libtoolize
$ libtoolize -f -c   
## 執行後,會提示在Makefile.am 和  configure.ac中是否需要添加內容,如提示需手動添加
$ aclocal
$ autoheader
$ touch README NEWS AUTHORS ChangeLog
$ autoconf
$ automake --add-missing
### 執行後不提示報錯,即可進行./configure && make 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章