Ubuntu下用glade和GTK+開發C語言介面程式(三)——學習make的用法,gladegtk

來源:互聯網
上載者:User

Ubuntu下用glade和GTK+開發C語言介面程式(三)——學習make的用法,gladegtk
makefile的規則makefile的規則如下:

target ... : prerequisites ...command......
target可以是一個object file(目標檔案),也可以是一個執行檔案,還可以是一個label。prerequisites就是要產生那個target所需要的檔案或者目標。command就是make需要執行的命令。(任意的shell命令)這三者的關係就是一個檔案依賴關係,target這一個或者多個目標檔案依賴與prerequisites中的檔案,其建置規則定義在command中。這其中的主要意思就是,prerequisites中如果有一個以上的檔案比target檔案要新的話,command所定義的命令就會被執行。這就是makefile中最核心的內容。一個簡單的樣本一個工程中有3個標頭檔,8個c檔案,下面的makefile定義了這個工程編譯的規則。
edit : main.o kbd.o command.o display.o \insert.o search.o files.o utils.occ -o edit main.o kbd.o command.o display.o \insert.o search.o files.o utils.omain.o : main.c defs.hcc -c main.ckbd.o : kbd.c defs.h command.hcc -c kbd.ccommand.o : command.c defs.h command.hcc -c command.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.h command.hcc -c files.cutils.o : utils.c defs.hcc -c utils.cclean :rm edit main.o kbd.o command.o display.o \insert.o search.o files.o utils.o
將上面內容儲存為檔案名稱為“makefile”或者“Makefile”的檔案中,直接到命令列中進入這個檔案的目錄中,執行make命令,即可產生所需要的可執行檔edit,如果要刪除執行檔案和所有的中間檔案,一個簡單的make clean 命令即可。在上面的makefile中,目標檔案(target)包含:執行檔案edit和中間目標檔案(*.o),依賴檔案(prerequisites)就是冒號後面的那些.c檔案和.h檔案。同時可以看出來,每一個.o檔案中都有一組依賴檔案,而這些.o檔案又是執行檔案edit的依賴檔案,依賴關係的實質上就是說明了目標檔案是由哪些檔案產生的。上面的依賴關係搞清楚後,下面的那一行定義了如何產生目標檔案的系統命令,這個命令以一個tab鍵作為開頭。這個是一個特別需要注意的地方。make不管命令是如何工作的,它只管執行你所寫的命令,make會比較target檔案和prerequisites檔案的修改日期,如果prerequisites檔案的日期要比targets的檔案日期要新,或者target檔案不存在的話,make就會執行命令。最後面定義的clean不是一個檔案,只是一個命令的名字,make不會去找clean的依賴檔案,其後也沒有跟依賴檔案,要執行這個clean命令,需要在命令中指出這個命令的標籤名字,比如make clean,這個clean就是標籤,make就會在其檔案中找到clean這個標籤下面對應的命令,來執行相應的命令。make的工作方式在預設下,也就是我們只需要輸入make命令。1、make會在目前的目錄下找名字為“Makefile”或者“makefile”的檔案。2、如果找到,它會找檔案中的第一個目標檔案(target),在上面的makefile檔案它會找到“edit”這個檔案,並把這個檔案作為最終的目標檔案。3、如果edit檔案不存在,或是edit所以來的後面的.o檔案的修改時間要比這個edit檔案新,那麼,他就會執行後面所定義的命令來產生這個edit檔案。4、如果上面的.o檔案也不存在的話,那麼make會在當前檔案中找目標為.o檔案的依賴性,最後執行命令產生相應的.o檔案。5、只要可以找到.h檔案和.c檔案,那麼make就會執行它的命令來最終產生目標檔案edit。上面的工作方式是一層一層的依賴關係。make只管根據具體的依賴關係在當前檔案夾中搜尋所需要的檔案,如果找不到所需的檔案,那麼make就會直接退出。並報錯,對於所定義的命令的錯誤,或者是編譯不成功。make根本不管這些東西,make只是根據所定義檔案的依賴關係來執行你所定義的命令,如果中間有差錯,那麼make直接退出不在執行命令。在上面的規則中,像clean這種沒有依賴檔案關係,後面只跟了一條命令的話,當執行make的時候這種命令不會執行,但是可以在make後面顯示的聲明這個命令來執行。例如make clean,這樣就執行了clean後面所定義的命令,將產生的所有中間檔案和目標檔案清理,以便於重新編譯。在編譯過程中,如果這個工程被編譯過了,當我們修改了其中的一個檔案,那麼根據make的規則,make不會再去編譯其他已經產生好了的目標檔案,智慧重新編譯這個被修改的檔案,並產生最終的目標檔案,這就是make只管那些依賴檔案的時間是否比這個目標檔案的時間新,是的話,就會重新編譯這個檔案,其他的不管,並最終連結成所需要的最終的目標檔案edit。makefile中使用變數在上面的例子中,我們可以看到edit後面跟的依賴檔案和命令中對【.o】檔案重複了兩次,如果我們要引入一個.o檔案,或者修改一個.o檔案的名字,那麼我們需要修改三個地方,edit裡面有兩個,和下面的一個.o檔案,這在小的工程中修改還算容易,但是一個工程要是比較大的話,那麼makefile寫的會比較大且複雜,那時就有可能忘記修改某個地方。所以為了makefile的易於維護,在makefile中可以使用變數,makefile的變數其實也就是定義了一些字串,可以理解成C語言中的宏定義。比如我們可以聲明一些變數來代表目標檔案,如:OBJECT,obj,objects都行。可以在makefile中按如下定義變數。
objects = main.o kbd.o command.o display.o \insert.o search.o files.o utils.o
那麼我們在makefile中就可以以"$(objects)"的方式來使用這個變數了。於是makefile就可以改為下面的方式:
objects = main.o kbd.o command.o display.o \insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)main.o : main.c defs.hcc -c main.ckbd.o : kbd.c defs.h command.hcc -c kbd.ccommand.o : command.c defs.h command.hcc -c command.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.h command.hcc -c files.cutils.o : utils.c defs.hcc -c utils.cclean :rm edit $(objects)
這樣我們修改[.o]檔案的時候只需要簡單的在變數objects中修改就可以了。清空檔案目標的規則每個makefile中都應該有一個清空目標檔案(.o和可執行檔),這不僅便於編譯,也可以保持檔案的清潔。一般的清空規則如下:
clean:rm edit $(objects)
更穩健的方式如下:
.PHONY : cleanclean :-rm edit $(objects)
.PHONY意思表示clean是一個"偽目標"。在rm命令前面加了一個減號的意思為,也許某些檔案出現問題,但不用管,繼續做後面的事,當然,clean規則一般都是放在makefile的檔案的最後,這也是個不成文的規則。
當然這裡只是介紹了make的一些簡單知識,這些知識足夠寫一些小系統的編譯了,如果有興趣的同學可以找本專門介紹make的書籍來讀一下,加深自己對make的一些理解。
在linux下用gtk寫圖形化使用者介面 ,想使用glade3,想知道具體的步驟

安裝個anjuta吧,這個是整合式開發環境,可以協助你管理工程,當然也可以幫你建立glade3工程和gtk工程
 
glade與GTK開發介面

同問!幫你頂一下,我只在PC上做過。
對了,你程式中的glade檔案的路徑沒放錯嗎?
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.