• <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 一個(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 );
            }


            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 {} \-\
              
            ! -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; }; }

            添加一個(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

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


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


            囯产精品久久久久久久久蜜桃| 99热都是精品久久久久久| 成人综合久久精品色婷婷| 亚洲午夜久久久久久久久久| 久久AV高清无码| 日韩久久久久中文字幕人妻| 一本一道久久a久久精品综合| 日韩精品无码久久久久久| 亚洲综合久久综合激情久久| 久久福利资源国产精品999| 国内精品久久久人妻中文字幕| 久久精品中文字幕第23页| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 四虎国产永久免费久久| 久久影视国产亚洲| 99精品国产在热久久无毒不卡| 亚洲а∨天堂久久精品9966| 久久99热国产这有精品| 久久久久久久久久久久久久| 久久青青草原精品国产不卡| 国产精品视频久久| 东方aⅴ免费观看久久av| 色欲综合久久躁天天躁| 国产综合精品久久亚洲| 精品少妇人妻av无码久久| 人妻无码精品久久亚瑟影视| 久久婷婷色综合一区二区| 成人精品一区二区久久久| 久久精品国产福利国产秒| 久久99精品久久久久子伦| 久久精品中文字幕一区| 久久免费视频1| 四虎国产精品成人免费久久| 色婷婷综合久久久久中文字幕| 久久综合给合综合久久| 久久精品国产精品亜洲毛片| 狠狠人妻久久久久久综合| 国产精品无码久久久久| 久久精品国产亚洲AV不卡| 亚洲精品无码久久久久AV麻豆| 久久久噜噜噜久久中文字幕色伊伊 |