第十二講 多目錄下makefile的通用寫法zz

2021-04-13 08:10:38 字數 2393 閱讀 6549

發信人: gdtyy (gdtyy), 信區: embedded

標  題: 第十二講 多目錄下makefile的通用寫法

發信站: 水木社群 (mon jun 25 23:36:58 2007), 站內

***************************************

* 第十二講 多目錄下makefile的通用寫法 *

***************************************

2007/03/14  [email protected]  www.armecos.com

很多網友在使用《ecos增值包》時遇到了障礙,在將自己的程式專案移植到ecos平台上

時,不知道如何寫makefile。因為原來的複雜專案是多目錄的,不同目錄實現不同的功能,

這樣條理清晰,但《ecos增值包》給出的makefile是非常簡單的編譯指令碼,遠遠不能滿足實

際需要。現在奉獻出自己的乙個多目錄下makefile的通用模板,以感謝網友們的鼓勵。

makefile的本質是描述檔案間依賴關係的指令碼,但它與普通程式不同,不是按照時序運

行,而且每個人寫出來的版本都不一樣,似乎沒有固定的模式,手工書寫makefile對大部分

人來說都不輕鬆。為此有人設計了autoconf/automake之類的自動生成工具,大大減輕了負

擔,使用者只要順次執行./configure、make、make install就可以實現發布程式的編譯安裝

。不過這種方法更適合於桌面系統,在嵌入式系統中,交叉編譯環境在編譯時是確定的,可

以不用進行自動配置探測,這就使得我們手工編寫makefile通用模板成為了可能。

了解makefile的書寫非常重要,不僅僅只針對ecos平台,其他如:linux驅動程式設計、

u-boot移植、應用程式開發等,即使不需要修改makefile,最好也能看懂它。一般來說,

makefile是程式開發的難點。這裡學習的編寫方法,也可以用於以後其他系統的開發。

雖然makefile的書寫沒有一定之規,但還是能抽象總結出一些共性的東西。例如:變數

定義(巨集定義、路徑、編譯選項)、規則描述、依賴關係、子目錄位置等。我把他們分寫在5

個檔案裡,每個檔案側重於乙個方面,使得條理清晰,易於擴充套件修改。雖然不很全面,也不

一定非要按照這種寫法書寫,但確實很好用。如下:

--------------

| default.mk |

--------------

這個檔案裡主要描述變數定義。

mode --- 編譯模式定義。debug/release。通過此開關決定優化級數、列印語句的輸出

(還可細分級別,精確控制輸出)。debug時輸出盡量多的除錯資訊,優化級別低;release時

關閉除錯資訊,優化級別高,執行速度快。

releasefor --- 平台優化。正常/車載/室外/實驗室等。針對不同應用環境,配置編譯

經過特殊優化的**。

ver --- 版本控制。指示編譯不同版本的軟體。

pkg_install_dir --- ecos庫路徑

交叉編譯工具 --- 增加合適的字首。as彙編器、ld鏈結器、c編譯器、c++編譯器、ar

庫工具、nm符號資訊、objcopy格式轉換、objdump反彙編、strip剝離器等

cflag --- c編譯標誌。編譯選項,巨集定義,-i/-l項。

extracflags --- 更多c編譯選項。

cxxflags --- c++編譯標誌

extracxxflags --- 更多c++編譯標誌

ldflags --- 鏈結標誌

libs --- 庫標誌。

------------

| rules.mk |

------------

此檔案主要定義巨集和編譯規則。

定義彙編編譯、c編譯、c++編譯、鏈結、製作庫、製作bin檔案等命令

從.s、.c、.cxx生成.o、.out、.bin的規則和依賴關係。

---------------

| makefile.in |

---------------

此檔案描述個子目錄路徑。

各子目錄和根目錄build或clean目標檔案

------------

| makefile |

------------

引用default.mk和rules.mk,建立不同模式下的編譯目錄,存放臨時檔案和最終檔案。

------------------

| 子目錄makefile |

------------------

引用default.mk和rules.mk,建立不同模式下的編譯目錄,存放臨時檔案和最終檔案。

生成子目錄下的目標檔案和庫檔案。

指令碼**(見範例原始碼)

--

第十二講 物件導向基礎 多型

多型可以理解為事物存在的多種體現形態。例如,貓這個物件對應的型別是貓型別 貓 x new 貓 同時貓也是動物中的一種,也可以把貓稱為動物 動物 x new 貓 動物是貓和狗等具體事物中抽取出來的父型別。多型在程式中的體現為父類的引用或者介面的引用指向了子類的物件。多型出現的前提是必須是類與類之間有關...

第十二講 繪製NURBS曲線和曲面

上一節講了一般的曲線與曲面的繪製,本節講nurbs曲線和曲面的繪製。例11 此例繪製兩個相同形狀的nurbs曲面,不同之處是乙個為線框式,乙個是由實多邊形組成。執行後可以看到其中的區別,如圖十三所示。include include glunurbsobj thenurb1 glunurbsobj t...

EJB3的XML Schema第十二講

method intf 元素可以和方法元素的三種用法一起使用。例如,下面的方法元素例子可以被用於指向employeeservice bean 的遠端home 介面和遠端業務介面的所有方法。employeeservice home multiplicitytype 描述了關係中角色的多方。它的值必須是...