日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Makefile工具的使用

Make 程序最初設(shè)計是為了維護C程序文件防止不必要的重新編譯 。在使用命令行編譯器的時候,修改了一個工程中的頭文件,如何確保包含這個頭文件的所有文件都得到編譯?現(xiàn)在10機的版本生成是使用批處理程序,編譯那些文件依賴于程序的維護者,在模塊之間相互引用頭文件的情況下,要將所有需要重新編譯的文件找出來是一件痛苦的事情;在找到這些文件之后,修改批處理進行編譯 。實際上這些工作可以讓make程序來自動完成,make工具對于維護一些具有相互依賴關(guān)系的文件特別有用,它對文件和命令的聯(lián)系(在文件改變時調(diào)用來更新其它文件的程序)提供一套編碼方法 。Make工具的基本概念類似于Proglog語言,你告訴make需要做什么,提供一些規(guī)則,make來完成剩下的工作 。
1簡介
make工作自動確定工程的哪部分需要重新編譯,執(zhí)行命令去編譯它們 。雖然make多用于C程序,然而只要提供命令行的編譯器,你可以將其用于任何語言 。實際上,make工具的應(yīng)用范圍不僅于編程,你可以描述任和一些文件改變需要自動更新另一些文件的任務(wù)來使用它 。
1.1準備工作
如果要使用make,你必須寫一個叫做“makefile”的文件,這個文件描述工程中文件之間的關(guān)系,提供更新每個文件的命令 。典型的工程是這樣的:可執(zhí)行文件靠目標文件來更新,目標文件靠編譯源文件來更新 。
Makefile寫好之后,每次更改了源文件后,只要執(zhí)行make就足夠了,所有必要的重新編譯將執(zhí)行 。Make程序利用makefile中的數(shù)據(jù)庫和文件的最后修改時間來確定那個文件需要更新;對于需要更新的文件,make執(zhí)行數(shù)據(jù)庫中記錄的命令 。
可以提供命令行參數(shù)給make來控制那個文件需要重新編譯 。
1.2Makefile介紹
Makefile文件告訴make做什么,多數(shù)情況是怎樣編譯和鏈接一個程序 。
這里有一個簡單的makefile,描述如何編譯鏈接由8個C文件和3個頭文件組成的一個編輯器:
edit : main.o kbd.o command.o display.o
insert.o serach.o files.o utils.o
cc –o edit main.o kbd.o command.o display.o
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc –c main.c
kdb.o : kbd.c defs.h command.h
cc –c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o
insert.o search.o files.o utils.o
將長行用分開便于閱讀,這和使用一個長行的作用是一樣的 。使用這個makefile創(chuàng)建可執(zhí)行文件“edit”時運行make就可以了;如果要將可執(zhí)行文件和目標文件刪除,執(zhí)行make clean
make重新編譯這個編輯器時,每個更改的C文件必須重新編譯;如果頭文件更改了,每個包含頭文件的C文件必須重新編譯;每次編譯產(chǎn)生一個對應(yīng)于原文件的目標文件 。最終,目標文件鏈接在一起產(chǎn)生新的可執(zhí)行文件 。
1.3規(guī)則簡介
makefile中的規(guī)則是這樣的:
TARGET … : DEPENDENCIES …
COMMAND

目標(TARGET)程序產(chǎn)生的文件,如可執(zhí)行文件和目標文件;目標也可以是要執(zhí)行的動作,如“clean” 。
依賴(DEPENDENCIES)是用來產(chǎn)生目標的輸入文件,一個目標通常依賴于多個文件 。
命令(COMMAND)是make執(zhí)行的動作,一個可以有多個命令,每個占一行 。注意:每個命令行的起始字符必須為TAB字符!
有依賴關(guān)系規(guī)則中的命令通常在依賴文件變化時負責(zé)產(chǎn)生target文件,make執(zhí)行這些命令更新或產(chǎn)生target 。規(guī)則可以沒有依賴關(guān)系,如包含target “clean”的規(guī)則 。

推薦閱讀