歡迎您光臨本站 註冊首頁

Linux下軟體發布技巧

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  Linux現在能夠被越來越多的人認識及使用,在很大程度上可以歸結為其具有強大的C編譯器——gcc、便於交流的環境——Internet,以及雄厚的師資——有數不清的程序員在開發數不清的代碼.
  
  有了Linux和Internet,我們可以很容易地在世界範圍內發布軟體作品,與他人交流開發心得與技巧.當我們完成了自己的軟體作品,怎麼樣才能讓其他人以快捷、方便的方式與自己分享成果、理解開發思想呢?這就是我們要討論的Linux下軟體打包和發布的方法.
  
  在Linux尚未流行之前,Linux下軟體打包和發布應用僅僅停留在程序員中,因此軟體分發基本都使用源代碼方式,便於大家相互學習和交流.隨著大量普通用戶和商業應用的參與,源代碼方式就顯得過於繁瑣,對用戶要求太高,而且耗費時間,編譯好的二進位文件發布方式開始流行起來.這就是Linux下兩種主要的軟體發布方式:源代碼方式和二進位方式.源代碼方式通常是將源文件以tar、tgz格式打包,解包後進行配置、編譯和安裝;二進位方式以Red Hat公司的RPM(Red Hat Package Manager)格式最廣泛,它可以完成所有的步驟,自動將軟體安裝到系統中.
  
  tgz源代碼方式
  
  使用這種源代碼方式發布的軟體,一般需要進行下列步驟:
  
  1.解開壓縮文件,如tar、gz、bz2或tgz.
  
  2.執行./configure [--options] 進行軟體的配置.
  
  3.執行make、make install等命令編譯代碼,並安裝到系統中.
  
  因此,如果要發布軟體,就需要生成可供配置的configure文件和進行編譯安裝的Makefile.
  
  下面以一個簡單的例子來說明.假設要發布一個標準的hello程序,它打出「Hello, world!」的文字,該源程序命名為hello.c.在這個目錄下(注意只有源文件hello.c,不需要編譯hello.o或者hello),執行命令autoscan:
  
  $autoscan
  
  這樣會生成configure.scan文件,它包含了系統配置的基本選項.作為一個簡單的例子,其中很多東西是不需要的,可以修改這個文件,讓它僅僅包含下面幾行:
  
  AC_INIT(hello.c)
  AM_INIT_AUTOMAKE(hello, 0.1)
  AC_PROG_CC
  AC_OUTPUT(Makefile)
  
  然後把這個文件複製為configure.in,作為配置的輸入文件.
  
  由於使用了m4宏(AM_INIT... 語句),必須運行aclocal命令生成相應的宏文件:
  
  $aclocal
  
  在當前目錄中會產生aclocal.m4文件.
  
  然後執行autoconf,以生成configure執行腳本:
  
  $autoconf
  
  這樣關於配置的部分就完成了,下面是和編譯生成有關的.


  
  我們需要手工編輯一個文本文件——Makefile.am,內容如下:
  
  AUTOMAKE_OPTIONS=foreign
  bin_PROGRAMS=hello
  hello_SOURCES=hello.c
  
  這個文件應該很好理解,foreign告訴系統這是一個普通的應用軟體,該程序名稱為hello,而hello程序包含的源程序(SOURCES)只有hello.c這個文件.接著執行:
  
  $automake --add-missing
  
  automake會自動生成所有必須的文件,包括Makefile.in等重要文件.
  
  進行壓縮、打包,整個工作就完成了.
  
  獲得這個壓縮包的用戶只需要進行前面提到的三個安裝步驟,就可以順利地得到hello應用程序了.
  
  RPM二進位方式
  
  正如前面介紹的,使用源代碼方式發布軟體無論是對作者還是用戶都比較麻煩.於是,Red Hat公司開發出一種直接安裝編譯好的二進位文件方式,並可根據不同的平台發布不同的版本.用戶只需要一個命令,就可以完成所有要安裝的步驟,十分適合普通用戶使用.那麼,如何把自己的軟體製作成RPM包呢?
  
  下面以Red Hat Linux為例,在默認情況下,和RPM包相關的目錄是/usr/src/redhat/下的SOURCES、SPECS和RPMS.其中SOURCES目錄存放需要製作的源代碼文件,一般是tgz格式壓縮;SPECS目錄存放編寫的spec文件,這些文件指示RPM製作工具如何進行打包工作;而RPMS下有i386、i586、noarch等子目錄,分別對應不同的體系結構,如Intel 80386、586處理器等,noarch則是通用的,製作完成的RPM包就存放在這些目錄中.
  
  仍然以前面的hello為例,直接將hello.c壓縮成hello.tgz格式:
  
  $tar cfvz hello.tgz hello.c
  
  然後把hello.tgz拷貝到/usr/src/redhat/SOURCES下,並在/usr/src/redhat/SPECS/下編寫一個簡單的hello.spec文件,內容如下:
  
  Name: hello program
  Summary: My first linux software
  Version: 0.1
  Release: 1
  Copyright: OpenSource
  Group: Extensions/Chinese
  Source: hello.tgz
  Packager: NetSnake
  


[火星人 ] Linux下軟體發布技巧已經有538次圍觀

http://coctec.com/docs/linux/show-post-56325.html