<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Makefile自動生成工具-----autotools的使用(詳細)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    相信每個學習Linux的人都知道Makefile,這是一個很有用的東西,但是編寫它是比較復雜,今天介紹一個它的自動生成工具,autotools的使用。很多GNULinux的的軟件都是用它生成Makefile的,包括我們非常熟悉的Linux內核源代碼。

     

      1、準備:

      需要工具

      autoscan

      aclocal

      autoheader 

      automake

      autoconf

      auto make 

      在終端敲入命令,哪個沒有安裝哪個,一般是第一個autoscan沒有,其它的我用的Ubuntu10.04下全部都有

     

      2、測試程序編寫:
         建立目錄:mkdir include src

         編寫程序:include/str.h

     

    [cpp] view plaincopy  
    1. #include <stdio.h>  
    2. int str(char *string);  


        編寫程序:src/str.c

    [cpp] view plaincopy  
    1. #include "str.h"  
    2. //print string  
    3. int str(char *string){  
    4.         printf("\n----PRINT STRING----\n\"%s\"\n",string);  
    5.         return 0;  
    6. }  
    7.   
    8. //interface of this program  
    9. int main(int argc , char **argv){  
    10.         char str_read[1024];  
    11.         printf("Please INPUT something end by [ENTER]\n");  
    12.         scanf("%s",str_read);  
    13.         return str(str_read );  
    14. }  
    15.   
    16.        


      3、生成configure.ac

     

     

        configure.ac是automake的輸入文件,所以必須先生成該文件。
        執行命令:

     

    [cpp] view plaincopy  
    1. [root@localhost str]# ls  
    2. include  src  
    3. [root@localhost str]# autoscan  
    4. autom4te: configure.ac: no such file or directory  
    5. autoscan: /usr/bin/autom4te failed with exit status: 1  
    6. [root@localhost str]# ls  
    7. autoscan.log  configure.scan  include  src  
    8. [root@localhost str]# cp configure.scan configure.ac   


        修改 configure.ac 

     

     

     

    [cpp] view plaincopy  
    1. #                                               -*- Autoconf -*-  
    2. # Process this file with autoconf to produce a configure script.  
    3.   
    4. AC_PREREQ(2.59)  
    5. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)  
    6. AC_CONFIG_SRCDIR([include/str.h])  
    7. AC_CONFIG_HEADER([config.h])  
    8.   
    9. # Checks for programs.  
    10. AC_PROG_CC  
    11.   
    12. # Checks for libraries.  
    13.   
    14. # Checks for header files.  
    15.   
    16. # Checks for typedefs, structures, and compiler characteristics.  
    17.   
    18. # Checks for library functions.  
    19. AC_OUTPUT  




    修改

    [cpp] view plaincopy  
    1. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)  


    改為:

     

     

     

    [cpp] view plaincopy  
    1. AC_INIT(str,0.0.1, [bug@sounos.org])  


    其中:FULL-PACKAGE-NAME 為程序名稱,VERSION為當前版本, BUG-REPORT-ADDRESS為bug匯報地址

     

     

    然后添加兩句話:

        AM_INIT_AUTOMAKE
        AC_CONFIG_FILES([Makefile])

    結果如下:(兩句話不是在一起的)

    [cpp] view plaincopy  
    1. #                                               -*- Autoconf -*-  
    2. # Process this file with autoconf to produce a configure script.  
    3.   
    4. AC_PREREQ(2.59)  
    5. #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)  
    6. AC_INIT(str, 0.0.1, [bug@sounos.org])  
    7. AM_INIT_AUTOMAKE  
    8. AC_CONFIG_SRCDIR([include/str.h])  
    9. AC_CONFIG_HEADER([config.h])  
    10.   
    11. # Checks for programs.  
    12. AC_PROG_CC  
    13.   
    14. # Checks for libraries.  
    15.   
    16. # Checks for header files.  
    17.   
    18. # Checks for typedefs, structures, and compiler characteristics.  
    19.   
    20. # Checks for library functions.  
    21. AC_CONFIG_FILES([Makefile])  
    22. AC_OUTPUT  



    4、執行aclocal

    [cpp] view plaincopy  
    1. [root@localhost str]# aclocal  
    2. /usr/share/aclocal/libfame.m4:6: warning: underquoted definition of AM_PATH_LIBFAME  
    3.   run info '(automake)Extending aclocal'  
    4.   or see http://sources.redhat.com/automake/automake.html#Extending-aclocal  


    5、制作Makefile.am

    [cpp] view plaincopy  
    1. [root@localhost str]# vi Makefile.am  
    2. #Makefile.am  
    3. bin_PROGRAMS    = str  
    4. str_SOURCES     = include/str.h src/str.c  
    5. str_CPPFLAGS    = -I include/  


    automake 這個命令需要用到這個配置文件。各個選項意思比較直觀,不多說。

     

     

     

    6、autoheader

     

    [cpp] view plaincopy  
    1. [root@localhost str]# autoheader  


    7、automake必須文件:

    [cpp] view plaincopy  
    1. *  install-sh  
    2. * missing  
    3. * INSTALL  
    4. * NEWS  
    5. * README  
    6. * AUTHORS  
    7. * ChangeLog  
    8. * COPYING  
    9. * depcomp   


    其中,以下文件在執行automake -a的時候會自動生成

     

     

     

    [cpp] view plaincopy  
    1. * install-sh  
    2. * missing  
    3. * INSTALL  
    4. * COPYING  
    5. * depcomp   


    所以,接下來手動生成剩下的文件

     

     

     

    [cpp] view plaincopy  
    1. [root@localhost str]# touch NEWS README AUTHORS ChangeLog  


    8、執行automake -a

     

     

     

    [cpp] view plaincopy  
    1. [root@localhost str]# automake -a  
    2. configure.ac: installing `./install-sh'  
    3. configure.ac: installing `./missing'  
    4. Makefile.am: installing `./INSTALL'  
    5. Makefile.am: installing `./COPYING'  
    6. Makefile.am: installing `./compile'  
    7. Makefile.am: installing `./depcomp'  


    9、autoconf

    [cpp] view plaincopy  
    1. [root@localhost str]# autoconf  
    2. [root@localhost str]# ls  
    3. aclocal.m4      autoscan.log  config.h.in   configure.scan  include     Makefile.am  NEWS  
    4. AUTHORS         ChangeLog     configure     COPYING         INSTALL     Makefile.in  README  
    5. autom4te.cache  compile       configure.ac  depcomp         install-sh  missing      src  


    10、執行測試:
          執行./configure

    [cpp] view plaincopy  
    1. [root@localhost str]# ./configure --prefix=/u  
    2. checking for a BSD-compatible install... /usr/bin/install -c  
    3. checking whether build environment is sane... yes  
    4. checking for gawk... gawk  
    5. checking whether make sets $(MAKE)... yes  
    6. checking for gcc... gcc  
    7. checking for C compiler default output file name... a.out  
    8. checking whether the C compiler works... yes  
    9. checking whether we are cross compiling... no  
    10. checking for suffix of executables...  
    11. checking for suffix of object files... o  
    12. checking whether we are using the GNU C compiler... yes  
    13. checking whether gcc accepts -g... yes  
    14. checking for gcc option to accept ANSI C... none needed  
    15. checking for style of include used by make... GNU  
    16. checking dependency style of gcc... gcc3  
    17. configure: creating ./config.status  
    18. config.status: creating Makefile  
    19. config.status: creating config.h  
    20. config.status: config.h is unchanged  
    21. config.status: executing depfiles commands  


    執行 make

    [cpp] view plaincopy  
    1. [root@localhost str]# make  
    2. make  all-am  
    3. make[1]: Entering directory `/data/devel/c/str'  
    4. 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; \  
    5. then mv -f ".deps/str-str.Tpo" ".deps/str-str.Po"; else rm -f ".deps/str-str.Tpo"; exit 1; fi  
    6. gcc  -g -O2   -o str  str-str.o  
    7. make[1]: Leaving directory `/data/devel/c/str'  


    此時已經生成了 str(可執行文件名字在前面設置Makefile.am的參數時候去頂)這個,可以通過./str直接看到運行結果

    [cpp] view plaincopy  
    1. [root@localhost str]# ./str  
    2. Please INPUT something end by [ENTER]  
    3. abcksdhfklsdklfdjlkfd  
    4.   
    5. ----PRINT STRING----  
    6. "abcksdhfklsdklfdjlkfd"  


    不過這里我們都做一步,把它安裝到系統里面,這樣我們只要在終端輸入str就可以運行程序了。

     

     

     執行 make install:

     

    [cpp] view plaincopy  
    1. [root@localhost str]# make install  
    2. make[1]: Entering directory `/data/devel/c/str'  
    3. test -z "/u/bin" || mkdir -p -- "/u/bin"  
    4.   /usr/bin/install -c 'str' '/u/bin/str'  
    5. make[1]: Nothing to be done for `install-data-am'.  
    6. make[1]: Leaving directory `/data/devel/c/str'       


    接下來你可以make clean 清除安裝的那些.o 文件了。

     

     

    這樣生成了一個自動的Makefile。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全