• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            isware

            [轉(zhuǎn)]linux c 一個autotools的最簡單例子

              1、準備:
                 

               需要工具autoscan aclocal autoheader automake autoconf make 等工具.


              2、測試程序編寫:
                 


                  建立目錄: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 );
            }


            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為當前版本, BUG-REPORT-ADDRESS為bug匯報地址
                添加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選項自動生成,所以這里只需要建立如下文件
            [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í)行測試:


                  
            執(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、測試程序:

            [root@localhost str]# /u/bin/str
            Please INPUT something end by [ENTER]
            abcksdhfklsdklfdjlkfd

            ----PRINT STRING----
            "abcksdhfklsdklfdjlkfd"

            到此結(jié)束!!



            --------------------

            添加測試包:
            [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 {} \-\
              
            ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \-\
              
            ! -type d ! -perm -400 -exec chmod a+r {} \-\
              
            ! -type d ! -perm -444 -exec /bin/sh /data/devel/c/str/install-sh --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 ->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; }; }

            添加一個支持子目錄、靜態(tài)庫、自定義configure選項的包

            支持子目錄Makefile.am 選項 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 選項,見acinclude.am
            AC_CHECK_EXTRA_OPTIONS
            # Checks for library functions.

            AC_CONFIG_FILES([Makefile
                             src
            /Makefile])
            AC_OUTPUT

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


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久亚洲精品国产精品婷婷| 久久综合综合久久综合| 精品综合久久久久久888蜜芽| 性做久久久久久久久老女人| 国内精品伊人久久久久网站| 大伊人青草狠狠久久| 97久久精品午夜一区二区| 久久精品人人做人人爽电影| 久久香蕉综合色一综合色88| 亚洲国产精品久久| 久久久久亚洲爆乳少妇无 | 国产精品免费看久久久| 亚洲中文字幕久久精品无码APP| 亚洲中文字幕无码一久久区| 久久国产精品一国产精品金尊| 国产精品一区二区久久| 超级碰久久免费公开视频| 久久影院午夜理论片无码| 国内精品伊人久久久久妇| 午夜精品久久久久久中宇| 97久久综合精品久久久综合| 日韩一区二区久久久久久| 久久久久国产| 欧美丰满熟妇BBB久久久| 久久这里只有精品久久| 亚洲国产日韩欧美综合久久| 久久综合精品国产二区无码| 国产精品gz久久久| 亚洲欧美日韩中文久久| 一级做a爱片久久毛片| 性高湖久久久久久久久AAAAA| 久久99精品久久久久久久不卡| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久久久久尹人综合网亚洲| 久久精品无码一区二区日韩AV| 色偷偷88888欧美精品久久久| 久久精品这里只有精99品| 乱亲女H秽乱长久久久| 欧美精品九九99久久在观看| 99久久免费国产精精品| 国产色综合久久无码有码|