[轉(zhuǎn)]linux c 一個(gè)autotools的最簡(jiǎn)單例子
1、準(zhǔn)備:
需要工具autoscan aclocal autoheader automake autoconf make 等工具.
2、測(cè)試程序編寫:
建立目錄:mkdir include src
編寫程序:include/str.h
#include <stdio.h>

int str(char *string);
編寫程序:src/str.c
#include "str.h"
//print string
int str(char *string){
printf("\n----PRINT STRING----\n\"%s\"\n",string);
return 0;
}

//interface of this program
int main(int argc , char **argv){
char str_read[1024];
printf("Please INPUT something end by [ENTER]\n");
scanf("%s",str_read);
return str(str_read );
}
需要工具autoscan aclocal autoheader automake autoconf make 等工具.
2、測(cè)試程序編寫:
建立目錄:mkdir include src
編寫程序:include/str.h




編寫程序:src/str.c















3、生成configure.in
configure.in是automake的輸入文件,所以必須先生成該文件。
執(zhí)行命令:
[root@localhost str]# ls
include src
[root@localhost str]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost str]# ls
autoscan.log configure.scan include src
[root@localhost str]# cp configure.scan configure.in
修改 configure.in
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([include/str.h])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_OUTPUT
修改
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
為
AC_INIT(str,0.0.1, [bug@sounos.org])
FULL-PACKAGE-NAME 為程序名稱,VERSION為當(dāng)前版本, BUG-REPORT-ADDRESS為bug匯報(bào)地址
添加AM_INIT_AUTOMAKE
添加AC_CONFIG_FILES([Makefile])
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(str, 0.0.1, [bug@sounos.org])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([include/str.h])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
4、執(zhí)行aclocal
[root@localhost str]# aclocal
/usr/share/aclocal/libfame.m4:6: warning: underquoted definition of AM_PATH_LIBFAME
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
5、制作Makefile.am
[root@localhost str]# cat Makefile.am
#Makefile.am
bin_PROGRAMS = str
str_SOURCES = include/str.h src/str.c
str_CPPFLAGS = -I include/
6、autoheader
[root@localhost str]# autoheader
7、automake必須文件:
* install-sh
* missing
* INSTALL
* NEWS
* README
* AUTHORS
* ChangeLog
* COPYING
* depcomp 其中
* install-sh
* missing
* INSTALL
* COPYING
* depcomp 可以通過automake -a選項(xiàng)自動(dòng)生成,所以這里只需要建立如下文件
[root@localhost str]# touch NEWS README AUTHORS ChangeLog
8、執(zhí)行automake
[root@localhost str]# automake -a
configure.ac: installing `./install-sh'
configure.ac: installing `./missing'
Makefile.am: installing `./INSTALL'
Makefile.am: installing `./COPYING'
Makefile.am: installing `./compile'
Makefile.am: installing `./depcomp'
9、autoconf
[root@localhost str]# autoconf
[root@localhost str]# ls
aclocal.m4 autoscan.log config.h.in configure.scan include Makefile.am NEWS
AUTHORS ChangeLog configure COPYING INSTALL Makefile.in README
autom4te.cache compile configure.ac depcomp install-sh missing src
10、執(zhí)行測(cè)試:
執(zhí)行./configure
[root@localhost str]# ./configure --prefix=/u
checking for a BSD-compatible install
/usr/bin/install -c
checking whether build environment is sane
yes
checking for gawk
gawk
checking whether make sets $(MAKE)
yes
checking for gcc
gcc
checking for C compiler default output file name
a.out
checking whether the C compiler works
yes
checking whether we are cross compiling
no
checking for suffix of executables
checking for suffix of object files
o
checking whether we are using the GNU C compiler
yes
checking whether gcc accepts -g
yes
checking for gcc option to accept ANSI C
none needed
checking for style of include used by make
GNU
checking dependency style of gcc
gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
執(zhí)行 make
[root@localhost str]# make
make all-am
make[1]: Entering directory `/data/devel/c/str'
if gcc -DHAVE_CONFIG_H -I. -I. -I. -I include/ -g -O2 -MT str-str.o -MD -MP -MF ".deps/str-str.Tpo" -c -o str-str.o `test -f 'src/str.c' || echo './'`src/str.c; \
then mv -f ".deps/str-str.Tpo" ".deps/str-str.Po"; else rm -f ".deps/str-str.Tpo"; exit 1; fi
gcc -g -O2 -o str str-str.o
make[1]: Leaving directory `/data/devel/c/str'
執(zhí)行 make install
[root@localhost str]# make install
make[1]: Entering directory `/data/devel/c/str'
test -z "/u/bin" || mkdir -p -- "/u/bin"
/usr/bin/install -c 'str' '/u/bin/str'
make[1]: Nothing to be done for `install-data-am'.
make[1]: Leaving directory `/data/devel/c/str'
11、測(cè)試程序:
[root@localhost str]# /u/bin/str
Please INPUT something end by [ENTER]
abcksdhfklsdklfdjlkfd

----PRINT STRING----
"abcksdhfklsdklfdjlkfd"
到此結(jié)束!!
--------------------
添加測(cè)試包:
[root@localhost str]# make dist-gzip
{ test ! -d str-0.0.1 || { find str-0.0.1 -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr str-0.0.1; }; }
mkdir str-0.0.1
find str-0.0.1 -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec /bin/sh /data/devel/c/str/install-sh -c -m a+r {} {} \; \
|| chmod -R a+r str-0.0.1
tardir=str-0.0.1 && /bin/sh /data/devel/c/str/missing --run tar chof - "$tardir" | GZIP=--best gzip -c >str-0.0.1.tar.gz
{ test ! -d str-0.0.1 || { find str-0.0.1 -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr str-0.0.1; }; }
添加一個(gè)支持子目錄、靜態(tài)庫、自定義configure選項(xiàng)的包
支持子目錄Makefile.am 選項(xiàng) SUBDIR =
#Automake interface
SUBDIRS = src 支持靜態(tài)庫Makefile.am
EXTRA_DIST 用于添加除源碼外的文件到dist包
#Automake interface
bin_PROGRAMS = hello
hello_SOURCES = hello.c lib/sbase.h
hello_CPPFLAGS = -I lib
hello_LDFLAGS = -static lib/libsbase.a
EXTRA_DIST = lib/libsbase.a configure.in
AC_PREREQ(2.59)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(hello, 0.0.1, [SounOS@gmail.com])
#AM 聲明
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/hello.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdint.h stdlib.h sys/socket.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T

#用于自定義configure 選項(xiàng),見acinclude.am
AC_CHECK_EXTRA_OPTIONS
# Checks for library functions.

AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
configure.in是automake的輸入文件,所以必須先生成該文件。
執(zhí)行命令:








修改 configure.in




















修改




FULL-PACKAGE-NAME 為程序名稱,VERSION為當(dāng)前版本, BUG-REPORT-ADDRESS為bug匯報(bào)地址
添加AM_INIT_AUTOMAKE
添加AC_CONFIG_FILES([Makefile])























4、執(zhí)行aclocal





5、制作Makefile.am





6、autoheader

7、automake必須文件:















8、執(zhí)行automake








9、autoconf





10、執(zhí)行測(cè)試:
執(zhí)行./configure



















































11、測(cè)試程序:






到此結(jié)束!!
--------------------
添加測(cè)試包:










添加一個(gè)支持子目錄、靜態(tài)庫、自定義configure選項(xiàng)的包
支持子目錄Makefile.am 選項(xiàng) SUBDIR =


EXTRA_DIST 用于添加除源碼外的文件到dist包




































posted on 2011-05-31 11:42 艾斯維亞 閱讀(309) 評(píng)論(0) 編輯 收藏 引用