日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《跟我一起写Makefile》读书笔记(1)

發布時間:2023/12/20 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《跟我一起写Makefile》读书笔记(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容源于陳皓所寫《跟我一起寫Makefile》的學習和整理,如有侵權,請告知刪除。


一、概述

(1)makefile的作用,類似于windows中的IDE工具的功能;

(2)makefile 關系到整個工程的編譯規則

  • 定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯。
  • 甚至于進行更復雜的功能操作,因為makefile 就像一個 Shell 腳本一樣,其中也可以執行操作系統的命令。
(3)makefile 帶來的好處就是——“自動化編譯”
  • 一旦寫好,只需要一個 make 命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。

二、關于程序的編譯和連接


(1)源文件經過編譯器的編譯,生成中間目標文件(.o文件,即Object File
  • 在編譯時,編譯器只檢測程序語法,和函數、變量是否被聲明。如果函數未被聲明,編譯器會給出一個警告,但可以生成 Object File。
(2)中間目標文件經過鏈接器的鏈接,生成執行文件(.elf文件)
  • 一般來說,每個源文件都應該對應于一個中間目標文件(O 文件或是 OBJ 文件)。
  • 鏈接時,主要是鏈接函數和全局變量?。
  • 由于源文件太多,編譯生成的中間目標文件太多,而在鏈接時需要明顯地指出中間目標文件名,這對于編譯很不方便,所以,我們要給中間目標文件打個包,在 Windows 下這種包叫“庫文件”(Library File),也就是 .lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。
附加說明:
(3)由.elf文件得到可以燒寫的鏡像文件
  • 鏈接器所得到.elf文件是可執行程序(在操作系統下,此.el文件可以執行);
  • 但在嵌入式裸機中,我們需要的是可以燒寫的文件(可燒寫的文件就叫鏡像image);
  • 因此我們需要用這個.elf為原材料來制作鏡像,制作工具是交叉編譯工具鏈中的arm-linux-objcopy
(4)由.elf文件反匯編得到匯編程序,見博客點擊打開鏈接
  • 使用arm-linux-objdump工具進行反編譯(反匯編);
  • 把編譯后的.elf格式的可執行程序反編譯,得到它的匯編源代碼。
  • 我們使用反匯編主要是用來學習。


(4)Makefile文件中把編譯和鏈接的過程分開。

  • 用gcc a.c -o exe這種方式來編譯時,形式上把編譯和鏈接過程一步完成了。
  • 但是在內部實際上編譯和鏈接永遠是分開獨立進行的,編譯要使用編譯器gcc,鏈接要使用鏈接器ld。

三、Makefile的介紹

1、makefile的規則

target ... : prerequisites ... command
(1)如果prerequisites中有一個以上的文件比 target 文件要新的話,command 所定義的命令就會被執行。這就是 Makefile 的規則。也就是 Makefile 中最核心的內容。

(2)命令前一定要以一個 Tab 鍵作為開頭。

(3)“目標:”后面如果沒有依賴

  • 那么,make 就不會自動去找文件的依賴性,也就不會自動執行其后所定義的命令。
  • 要執行其后的命令,就要在 make 命令后明顯得指出這個lable 的名字。
  • 這樣的方法非常有用,我們可以在一個 makefile 中定義不用的編譯或是和編譯無關的命令,比如程序的打包,程序的備份,等等。

2、makefile是如何工作的?

  • make 會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。
  • 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make 就會直接退出,并報錯;
  • 對于所定義的命令的錯誤,或是編譯不成功,make 根本不理。


3、makefile中使用變量

這類似于shell中定義變量,然后使用$來引用


4、makefile的自動推導


.PHONY修飾clean,表示clean是一個偽目標


5、清空目標文件的規則

如上,每個Makefile中都應該寫一個清空目標文件(.o 和執行文件)的規則,這不僅便于重編譯,也很利于保持文件的清潔


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的《跟我一起写Makefile》读书笔记(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。