歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

GNU/Linux開發第一步

  目前,很多朋友學完了C語言,但並不能在GNU/Linux系統下進行編程開發。究其原因,GNU/Linux系統還未大面積普及是大礙之一,另外,人們不熟悉GNU/Linux系統下的開發工具也是關鍵。本文就是以“用例”的形式講述在GNU/Linux系統下如何進行應用軟件開發的基礎和常識,為將來在GNU/Linux系統中進行大規模或企業級開發鋪路。所謂“用例”,就是通過簡單的例子來學習,最終達到能在自己的實際中應用的目的。     本文要求讀者熟練Linux操作系統的常用操作,掌握C語言語法,能理解Linux系統的組成原理和了解Shell和Perl等腳本語言。     平台選擇   首先,從事GNU/Linux(以下簡你Linux)系統下的應用開發,應該有一個合適的操作平台和開發環境,所以選擇和安裝Linux操作系統成為Linux開發者的第一課。目前可供選擇的Linux操作系統種類很多,如Red Hat(最新版名為Fedora)、SuSE、Mandrake和中科紅旗(Red Flag),還有開源組織中有名的Debian等。雖然版本很多,但它們在底層系統組成上的差別是微乎其微的。我們以Red Hat 9.0為開發平台,以後的操作和開發都在這一系統平台上進行。     開發系統的組成   圖1簡要說明了Linux系統開發工具的組成。     Linux操作系統內核底層的開發工具和輔助工具,有的是直接建立在內核基礎上,如Shell、GCC和Make等;有的是建立在腳本語言的基礎之上的,如Automake、Autoconf和LiBTool等。它們是Linux操作系統外層的圖形界面開發工具(GTK+、QT等)和網絡應用開發工具(Perl、PHP和Python等)的基礎和過渡。掌握了底層開發工具,對外層應用開發是有好處的,這樣可以加快和優化外層應用開發,從而達到開發速度和開發質量的和諧統一。     慎選IDE   本文講述的程序編輯工作多數是用Linux系統中常用的Emacs和vi來做,在終端窗口中進行命令編譯調試。熟悉Windows下編程的朋友們會質疑為什麼不用IDE(集成開發環境),是Linux下沒有嗎?答案當然是否定的。Linux下有很多IDE,事實上Emacs就是一個非常好的IDE,其它的還有CodeForge、ANJUTA和Kdeveloper等。對編程人員來說,IDE在編譯控制的底層隱藏了很多東西,如果軟件開發者真正了解和掌握了這些東西,對開發出更好的應用程序是大有幫助的。     對於IDE可以這麼比喻,它好象是飛機上的自動駕駛儀,有了它飛行員會輕松許多,但如果飛行員沒有真正掌握飛機的駕駛技術,在飛行中如果自動駕駛儀失靈的話,墜機是必然的,這樣的飛行員是不能讓他駕機的。編程人員也如此,只用IDE開發軟件是不夠的。     開始動手   坐談論道不如起而躬行。下面就從一個簡單的C語言源文件的編譯開始,研究這些內容。     首先是安排好目錄。在自己的用戶目錄下,創建一個總的目錄learn-gnu,然後在此目錄下創建第一個學習目錄learn-1,在此目錄下用Emacs編輯hello.c文件,輸入如下內容:     //hello.c  #include   int main(int argc, char *argv[])  {  int i;    if(argc<=1)  {  printf("The program name is :%s\n", argv[0]);  }  else  {  printf("The program name is :%s\n", argv[0]);  for(i=1; i printf("The argument %d is : %s\n", i, argv[i]);  }  }    這段代碼試驗了命令行參數及其簡單的用法,正常情況下在終端中輸入下面的命令即可編譯:     # gcc hello.c -o hello    編譯後輸出可執行文件hello,執行./hello即可輸出下面的語句:     The program name is :./hello    這是C語言初學者學到的最簡單、最原始、最直接、也是最有效的編譯方法,測試方法也是最簡單的。因為所給用例的代碼也比較簡單,不用太復雜的方法。     這裡沒有用很經典的“Hello world”程序,其原因是筆者在輔導一些學生們學習C語言課程時,發現他們對這個程序還不太理解。     有沒有更好的辦法來編譯這個源程序呢?可以編寫一個簡單的Makefile文件,使之自動編譯源程序,生成可執行文件,表1為Makefile文件的內容。     CC = gcc 其中執行make或make all即執行all:  all: hello.c 後面的命令,即編譯;  $(CC) hello.c -o hello make clean 就執行clean:後面的命令,  clean: 即清除編譯結果。  rm hello -f    用Emacs編輯它並和上面的hello.c保存到同一文件目錄,注意文件名為Makefile,然後,在終端中輸入make命令,此時會出現下面的情況:     # make  # gcc hello.c -o hello    再執行列目錄命令,會發現已生成可執行文件hello:     # ls  hello hello.c Makefile    下面是多個參數的輸出結果,相信會對命令行參數有初步的了解。     # ./hello abc def 123  The program name is :./hello  The argument 1 is : abc  The argument 2 is : def  The argument 3 is : 123    Makefile是Make工具默認的配置文件,執行make命令時,Make自動查找Makefile文件。用多個C語言源文件來編譯時,使用Make會讓編譯過程更加快捷有效。因為Make是按源文件的更新時間判斷是否進行編譯的,即改動了哪個文件就編譯哪個文件,未改動的就不做處理。     這裡以一個稍復雜的例子來說明。一個項目由三個C語言源文件a.c、b.c和hello.h構成,其中a.c和b.c中都包含hello.h,最終輸出的可執行文件為hello。表2為這個Makefile文件的內容。     想進一步學習Make的使用和Makefile文件的編寫,可以看一下它的參考文檔,網址是http://www.gnu.org/manual/make-3.79.1/Html_chapter/make_toc.html。     如果源程序再復雜一些,例如多一些源文件和附加一定數量的資源(如圖像和文檔等),或者涉及到系統中的其它支持(如需要系統安裝有文檔處理工具,語法檢測工具,某些開發工具的開發庫等)時,再編寫Makefile文件就會變得非常麻煩,也非常容易出錯。這種情況可以使用Autoconf 、Automake和Libtool等工具來完成這一工作,這讓Makefile有更多的功能,編譯更加完備,檢測更加全面,而且還多出了安裝、打包發布等更多新功能。




Copyright © Linux教程網 All Rights Reserved