【文章內(nèi)容簡(jiǎn)介】
軟件學(xué)院 七、版本管理工具 版本管理是用戶對(duì)項(xiàng)目文件版本進(jìn)行控制的工具軟件。包括:版本庫(kù)和臨時(shí)工作區(qū)。 61 軟件學(xué)院 嵌入式軟件版本管理工具的功能結(jié)構(gòu) 圖 9 . 2 0 嵌 入 式 軟 件 版 本 管 理 功 能 結(jié) 構(gòu) 示 意版 本 管 理版本標(biāo)記版本合并發(fā)行版本標(biāo)識(shí)安全保護(hù)目錄版本控制版本分支文件版本控制基線版本標(biāo)識(shí)項(xiàng)目啟動(dòng)需求分析系統(tǒng)設(shè)計(jì)編碼調(diào)試登錄管理注銷(xiāo)管理用戶管理日志管理62 軟件學(xué)院 GNU的嵌入式開(kāi)發(fā)環(huán)境 ? C編譯器 gcc ? make工具 GNU make ? 開(kāi)發(fā)調(diào)試工具 gdb 63 軟件學(xué)院 一、 gcc編譯器 gcc前端支持多種高級(jí)語(yǔ)言,后端支持多種平臺(tái),它是一個(gè)交叉編譯器,可以把源代碼編譯成在其他硬件平臺(tái)上運(yùn)行的可執(zhí)行代碼。 64 軟件學(xué)院 1. 編譯過(guò)程 ? 預(yù)處理 ? 編譯 ? 匯編 ? 鏈接 65 軟件學(xué)院 預(yù)處理 執(zhí)行源代碼的預(yù)處理,處理完后生成一個(gè)以“ .i”為后綴名的臨時(shí)文件。 66 軟件學(xué)院 編譯 將預(yù)處理后生成的源代碼編譯為后綴名為“ .s”的匯編文件。 67 軟件學(xué)院 匯編 gcc調(diào)用 as匯編程序,將匯編語(yǔ)言代碼轉(zhuǎn)換為以“ .o”為后綴名的中間代碼。 68 軟件學(xué)院 鏈接 它調(diào)用 ld鏈接程序,把所有目標(biāo)代碼以及靜態(tài)庫(kù),定位鏈接生成最后的可執(zhí)行程序或其他格式的目標(biāo)文件。 69 軟件學(xué)院 gcc編譯過(guò)程 圖 9 . 2 1 g c c 編 譯 過(guò) 程編 輯 t e s t . c g c c – E – o t e s t . i t e s t . c或 c p p t e s t . c t e s t . i g c c – S t e s t . c g c c – c t e s t . c g c c – o t e s t t e s t . c進(jìn) 行 預(yù) 處 理 操 作 , 結(jié) 果 文 件 為t e s t . i 。 與 t e s t . c 比 較 , t e s t . i 的文 件 頭 部 加 入 了 s t d i o . h 文 件 的內(nèi) 容 ; 程 序 中 的 I N T 和 C H A R 分別 被 1 和 ‘ A ’ 替 換 。編 譯 t e s t . i , 無(wú) 錯(cuò) 時(shí) 生 成 結(jié) 果 文 件 t e s t . s :L i n u x 下 的 匯 編 文 件 , 可 以 用 v i 或 e m a c s 打開(kāi) 觀 察 。對(duì) t e s t . s 進(jìn) 行 匯 編 , 得 到目 標(biāo) 文 件 t e s t . o .鏈 接 t e s t . o , 生 成 可 執(zhí) 行 文 件 t e s t 。運(yùn) 行 t e s t 可 體 現(xiàn) 程 序 的 相 關(guān) 功 能 。運(yùn) 行 t e s t70 軟件學(xué)院 2. 交叉 gcc的生成 gcc的缺省配置是本地使用。當(dāng)需要交叉 gcc時(shí),可利用 Linux環(huán)境下提供的一些交叉 gcc生成工具來(lái)重新配置。 71 軟件學(xué)院 交叉 gcc的生成過(guò)程 ? 重新生成 binutils。 ? 生成 Llinux Headers ? 生成目標(biāo)機(jī)的 Glibc ? 生成交叉 GCC 72 軟件學(xué)院 二、 項(xiàng)目編譯管理工具 make ? 自動(dòng)查找已修改的源程序文件,并對(duì)它們進(jìn)行編譯; ? 對(duì)未改動(dòng)的源程序文件,如果已經(jīng)存在中間代碼文件(“ .o”文件)則不再重新編譯; ? 將所有的中間代碼文件和庫(kù)鏈接成可執(zhí)行文件或特定格式的目標(biāo)文件。 73 軟件學(xué)院 1. Make命令 一般語(yǔ)法規(guī)則是: make [f makefile文件名 ] [其他選項(xiàng) ] [目標(biāo)名 ] 說(shuō)明: f: makefile的文件名字。 目標(biāo)名 :所要更新目標(biāo)的名稱。 兩個(gè)常用選項(xiàng)。: n:只顯示生成指定目標(biāo)的各命令,并不 實(shí)際執(zhí)行,可以用來(lái)檢查 make文件中的錯(cuò)誤。 p:顯示并檢查 make文件中的所有宏定義和所有內(nèi)部規(guī)則。 74 軟件學(xué)院 2. 目標(biāo) make文件中描述了目標(biāo)依賴于哪些源程序文件,按照什么樣的規(guī)則生成。目標(biāo)的狀態(tài)取決于所依賴的源程序文件狀態(tài)。語(yǔ)法規(guī)則為: t a r g e t : d e p e n d e n c y c o m m a n d75 軟件學(xué)院 3. 宏 宏的基本定義語(yǔ)法為: marco_name = string 而已定義宏的引用語(yǔ)法規(guī)則為: $(marco_name) 或者 ${marco_name} 76 軟件學(xué)院 Make內(nèi)部預(yù)定義的宏 ? $@,表示當(dāng)前目標(biāo)名。 t e s t : $ ( O B J E C T ) g c c – o $ @ $ ( O B J E C T ) 等價(jià)于語(yǔ)句: t e s t : $ ( O B J E C T ) g c c – o t e s t $ ( O B J E C T ) 77 軟件學(xué)院 Make內(nèi)部預(yù)定義的宏 ? $*,表示去掉后綴的當(dāng)前目標(biāo)名。 ? $,表示目標(biāo)所依賴文件名。 78 軟件學(xué)院 4. 符號(hào) ? %,對(duì)應(yīng)于具體的文件名 ? @,表示命令本身不在屏幕上顯示。 ? :=,變量定義,它不是“ =”符號(hào)。 79 軟件學(xué)院 符號(hào) 例如 : 結(jié)果是: A = g c cB = $ ( A )C : = $ ( A )A = c cA = c cB = c cC = g c c80 軟件學(xué)院 5. 函數(shù) 語(yǔ)法格式如下: $(funame arg1, …, argn) 例如: SOURCES=$(wildcard *.c) 產(chǎn)生一個(gè)所有以“ .c”為后綴名的文件的列表,然后存入變量 SOURCES中。 81 軟件學(xué)院 6. 注釋 make文件的注釋是用“ ”開(kāi)頭的語(yǔ)句。 82 軟件學(xué)院 示例 a n e x a m p l e f o r m a k e f i l e f i l e n a m e : m a k e f i l e : : : : : :C C = g c cC F L A G S = g – O – W a l lI N C L U D E = L I B : : / : : : : : :S O U R C E S = $ ( w i l d c a r d * . c )O B J E C T S = $ ( p a t s u b s t % . c , % . o , $ ( S O U R C E S ) ) : : : : : :% . o : % . c $ ( C C ) $ ( C F L A G S ) $ ( I N C L U D E ) – c $ $ @a l l : g d b t e s t : : : : : : :g d b t e s t : $ ( O B J E C T S ) $ ( C C ) $ ( C F L A G S ) $ ( L I B ) $ ( O B J E C T S ) : : : : : : : : : : : : : : :c l e a n :: r m – f * . o: r m – f g d b t e s t83 軟件學(xué)院 三、 gdb調(diào)試器 ? 運(yùn)行程序,給程序加所需的執(zhí)行條件。 ? 使程序在斷點(diǎn)處暫停運(yùn)行,并可繼續(xù)運(yùn)行。 ? 顯示程序暫停時(shí)的狀態(tài)信息。 ? 允許在暫停的程序中改變運(yùn)行數(shù)據(jù)。 ? 程序運(yùn)行出錯(cuò)后可以事后分析。 ? 支持遠(yuǎn)程調(diào)試。 ? 支持源碼級(jí)調(diào)試。 ? 支持反匯編調(diào)試,可調(diào)試無(wú)源碼的可執(zhí)行文件。 84 軟件學(xué)院 1. Gdb的調(diào)試過(guò)程 / * a n e x a m p l e f o r g d b * // * f i l e n a m e : t e s t . c * / i n c l u d e s t d i o . h i n c l u d e f c n t l . h i n c l u d e a s s e r t . h d e f i n e R C V _ L E N 3 2v o i d r e c e i v e ( i n t ) 。i n t m a i n ( ){ i n t f d 。 c h a