歡迎您光臨本站 註冊首頁

GNU/Linux開發第一步

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  以下內容由伊甸園網友liuqing9906提供
來源
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有更多的功能,編譯更加完備,檢測更加全面,而且還多出了安裝、打包發布等更多新功能。



[火星人 ] GNU/Linux開發第一步已經有412次圍觀

http://coctec.com/docs/program/show-post-71923.html