本文分享三個Makefile模板:編譯可執行程序、編譯靜態庫、編譯動態庫。
1 寫在前面
對于Windows下開發,很多IDE都集成了編譯器,如Visual Studio,提供了“一鍵編譯”,編碼完成后只需一個操作即可完成編譯、鏈接、生成目標文件。 Linux開發與Windows不同,Linux下一般用的的gcc/g++編譯器,如果是開發ARM下的Linux程序,還需用到arm-linux-gcc/arm-linux-g++交叉編譯器。 Linux下也可以實現“一鍵編譯”功能,此時需要一個編譯腳本“Makefile”,Makefile可以手動編寫,也可以借助自動化構建工具(如scons、CMake)生成。手動編寫Makefile是Linux和Windows程序員的區別之一,一般地一個通用的Makefile能夠適合大部分Linux項目程序。
2 三個Makefile模板
2.1 編譯可執行文件Makefile
【要點說明】 【1】程序版本 開發調試過程可能產生多個程序版本,可以在目標文件后(前)增加版本號標識。
????【2】編譯器選擇 ????Linux下為gcc/g++;arm下為arm-linux-gcc;不同CPU廠商提供的定制交叉編譯器名稱可能不同,如Hisilicon“arm-hisiv300-linux-gcc”。
????【3】宏定義 ????開發過程,特殊代碼一般增加宏條件來選擇是否編譯,如調試打印輸出代碼。-D是標識,后面接著的是“宏”。
????【4】編譯選項 ????可以指定編譯條件,如顯示警告(-Wall),優化等級(-O)。
????【5】源文件 ????指定源文件目的路徑,利用“wildcard”獲取路徑下所有依賴源文件。
????【6】頭文件 ????包含依賴的頭文件,包括源碼文件和庫文件的頭文件。
????【7】庫文件名稱 ????指定庫文件名稱,庫文件有固定格式,靜態庫為libxxx.a;動態庫為libxxx.so,指定庫文件名稱只需寫“xxx”部分,
????【8】庫文件路徑 ????指定依賴庫文件的存放路徑。注意如果引用的是動態庫,動態庫也許拷貝到“/lib”或者“/usr/lib”目錄下,執行應用程序時,系統默認在該文件下索引動態庫。
????【9】目標文件 ????調用“patsubst”將源文件(.c)編譯為目標文件(.o)。
????【10】執行文件 ????執行文件名稱
????【11】編譯
????【12】鏈接 ????可創建一個“output”文件夾存放目標執行文件。鏈接完輸出目標執行文件,可以刪除編譯產生的臨時文件(.o)。
????【13】清除編譯信息 ????執行“make clean”清除編譯產生的臨時文件。
2.2 編譯靜態庫Makefile
【要點說明】 基本格式與“編譯可執行Makefile”一致,不同點包括以下。 【1】使用到“ar”命令將目標文件(.o)鏈接成靜態庫文件(.a)。靜態庫文件固定命名格式為:libxxx.a。
2.3 編譯動態庫Makefile
【要點說明】 基本格式與“編譯可執行Makefile”一致,不同點包括以下。 【1】編譯選項和鏈接選項增加“-fPIC -shared ”選項。動態庫文件固定命名格式為libxxx.so。
3 Demo
3.1 編譯應用程序
編寫測試例程,文件存放目錄結構如下,頭文件存放在“include”目錄,庫文件存放在“lib”目錄,源文件存放在“source”目錄,Makefile在當前目錄下。 ????源碼1:
????源碼2:
????主函數源碼:
????庫文件,“./lib”目錄下存放兩個庫文件,一個靜態庫libfun_a.a,一個動態庫libfun_so.so。 ????Makefile文件即為“2.1節”的Makefile模板。 ????測試運行:
【如果執行文件提示無“libfun_so.so”,則需拷貝“libfun_so.so”到根目錄下的“/lib”或者“/usr/lib”目錄下,因為系統執行程序,默認從該路徑引腳動態庫】
3.2 生成靜態庫
編寫測試例程,生產的庫文件即為“3.1節”調用的庫文件(libfun_a.a)。文件存放目錄結構如下: ????源文件:
????Makefile文件即為“2.2節”的Makefile模板。 ????編譯生成靜態庫:
3.3 生成動態庫
編寫測試例程,生產的庫文件即為“3.1節”調用的庫文件(libfun_so.so)。文件存放目錄結構如下: ????源文件:
????編譯生成動態庫:
來源:https://blog.csdn.net/qq_20553613/article/details/90649734
-
Linux
+關注
關注
87文章
11423瀏覽量
212376 -
模板
+關注
關注
0文章
108瀏覽量
20791 -
編譯器
+關注
關注
1文章
1653瀏覽量
49743
原文標題:Linux下幾個Makefile通用模板
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
駕馭Makefile
makefile的基本語法
Makefile是什么?Makefile工作原理是怎樣的?Makefile經典教程免費下載

AVR-GCC Makefile 中文翻譯

一個stm32的makefile分享

評論