在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux 下的make 工具和 Makefile

科技綠洲 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2023-06-22 10:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

Linux 系列距離上一篇文章已經半年多了,因為各種事情一直耽擱到現在,很多小伙伴都問了好些次,一直在等著,感謝大家支持!確實時間拖得太久了,是時候重新加油起來!

簡單理了理思路,通過一篇簡單點的文章過度一下,上一篇講到了 Linux 下的 C 編程,本文就要引出 Make 以及 Makefile 了。

嵌入式 Linux 入門系列博文:

嵌入式 Linux 入門(一、Linux 基本介紹及文件結構)

嵌入式 Linux 入門(二、Linux 文件系統、文件類型及權限管理

嵌入式 Linux 入門(三、Linux Shell 及常用命令說明)

嵌入式 Linux 入門(四、Linux 下的編輯器 — 讓人愛恨交加的 vi )

嵌入式 Linux 入門(五、Shell 腳本編程上:認識 Shell 腳本)

嵌入式 Linux 入門(六、Shell 腳本編程下:Shell 腳本語法)

嵌入式 Linux 入門(七、Linux 下的環境變量)

嵌入式 Linux 入門(八、Linux 下的軟件安裝)

嵌入式 Linux 入門(九、Linux 下的磁盤管理)

嵌入式 Linux 入門(十、Linux 下的 C 編程)

嵌入式 Linux 入門 環境篇系列博文:

嵌入式 Linux 入門 環境篇(一、開發板初體驗)

嵌入式 Linux 入門 環境篇(二、安裝虛擬機 — 體驗 Ubuntu 22.04)

嵌入式 Linux 入門 環境篇(三、開發板和 PC 的網絡互通)

嵌入式 Linux 入門 環境篇(四、必備開發工具安裝)

嵌入式 Linux 入門 環境篇(五、NFS 文件共享)

嵌入式 Linux 入門 環境篇(六、搭建 TFTP 環境)

我是矜辰所致,全網同名,盡量用心寫好每一系列文章,不浮夸,不將就,認真對待學知識的我們,矜辰所致,金石為開!

一、Linux 下多文件編譯

在上一篇 Linux 下的 C 編程我們知道了 Linux 下的編譯器為 GCC ,以及如何使用 GCC 進行編譯,在文章我們講解 GCC 的編譯,使用的只使用了一個 .c 文件,直接使用

gcc [目標文件] -o [想要生產的文件名字]

那在遇到多個 .c 文件的時候如何處理呢?

實際上還是使用上面這條指令,其中的 [目標文件] 是可以為多個的。

舉一個簡單的例子,我們寫了三個.c 文件,內容如下:

圖片

編譯的方式如下圖:

圖片

這么看起來是不是感覺還算簡單?但是我們可以試想一下,以后做項目的時候,成千上萬個文件,怎么辦?

我們要考慮2個主要問題:

1、 文件數量多起來了以后如何處理?

2、只修改了單個文件,如何只重新編譯修改過后的單個文件?

我們不可能和上面示例一樣手動使用 gcc 命令輸入文件名的,而且文件多起來了,編譯時間需要很長,使用上面示例的命令,是會把所有的文件都重新編譯,在后面的 linux 學習開發中,項目的編譯時間可比學習 51 、STM32 哪些工程的時候多得太多,每次都編譯所有文件這種行為肯定是不可取的。

在 Windows 下面我們有各種集成的 IDE 工具,往往只需要一個按鈕,就可以編譯整個工程,方便快捷,比如我們熟悉的 Keil,我們只需要點擊 IDE 工具欄目的一個按鈕,就可以完成我們想要的操作:

圖片

那么在 Linux 下,我們該如何處理呢?

這就要用到本文主要說明的東西:Make 工具 和 Makefile 。

二、make 工具和 Makefile

首先我們要知道什么是 Make 工具,以及 什么 是 Makefile。

這部分的內容時基本概念,類似名詞解釋,大家記住就好,沒有什么特別需要說明的,因為我們的重點在于知道以及學會他們的使用.

2.1 make 和 Makefile 是什么?

make 工具:

make 本質上它是一個程序,是一個編譯工具。我們在后面進行程序的時候,都需要使用 make 命令。

使用 make 工具我們可以自動完成編譯工作,而且可以有效的處理我們上面提到的問題:

  1. 多個文件的自動編譯;
  2. 每次執行 make 命令,只重新編譯修改后的文件;. 這里提一句,Linux 是如何判斷文件是否有修改:文件的修改時間!就是通過 ls -l 查看的那個時間,make 會根據依賴關系,如果發現依賴的文件修改時間比自己新,那么久會重新編譯一下這個依賴文件)

利用 make 工具可以將大型的開發項目分解成為多個更易于管理的模塊,可以簡潔明快地理順各個源文件之間紛繁復雜的相互關系,大大簡化開發工作,避免不必要的重新編譯 。

make工具通過一個稱為 Makefile 的文件來完成并自動維護編譯工作,Makefile文件描述了整個工程的編譯、連接規則。

Makefile 文件:

Makefile 是一個文件,是一個描述一系列規則的文件。

Makefile 的 開頭 M 要大寫!(雖然有的地方說大小寫都可以,但是保證大寫,是肯定不會有莫名其妙的問題的)。

make 會根據 Makefile 文件的規則規則執行命令,最后完成編譯輸出 。

在 Makefile 文件中:

  • 定義一系列的規則來制定源文件編譯后的先后順序
  • 特定的語法規則、支持函數定義、函數調用
  • 能直接集成操作系統中的命令

這是我們學習 Linux 的一個重點對象,對于新手來說,至少要做到能夠看得懂,會一定程度的修改 Makefile 。

2.2 通過 STM32 提前熟悉 Makefile

實際上 STM32 的開發,我們也可以用到 Make 工具和 Makefile,如果大家目前也在用 STM32 開發,不妨使用 GCC 工具鏈開發,這樣也能提前熟悉 Makefile 。

如果是我的粉絲朋友,一定知道現在我做 STM32 都是使用的 gcc 工具鏈,具體可查看文章:

拋棄IDE — 在window下使用VScode搭建ARM開發環境

如果想看看簡單的 Makefile ,大家可以寫一個簡單的 STM32 工程,然后在 STM32CubeMX 生成工程的時候選擇 Makefile ,如下圖:

圖片

然后打開工程,就可以看看 ST 工具自動生成的 Makefile 文件了,可以讓自己提前熟悉熟悉 Makefile:

圖片

2.3 GCC 與 make 的關系/區別?

經常有小伙伴會被 GCC 與 make 工具搞得糊里糊涂,雖然知道怎么用,但是傻傻分不清楚或者是說不明白。

看清楚概念:GCC 是編譯器,make 是一個命令工具。

感覺把概念一說就清楚了啊, GCC 是一個編譯 C語言的編譯器, 而 make 是一個工具,他可以使得編譯工作簡化,只不過我們使用的時候 make 會調用 GCC 編譯器去完成編譯工作。

在 Makefile 中我們會指定執行編譯的編譯器類型,而且會根據指定的編譯器類型進行對應的命令操作,如下圖:

圖片

因為我們在 linux 下使用的都是 gcc 編譯器,所以 Makefile 中的會看到我們熟悉的 gcc 的操作命令,我們只不過是利用 make 工具的自動編譯去調用了 gcc 編譯器 對工程進行編譯。

三、一個簡單的 Makefile

上面說過,Makefile 是學習 Linux 的一個要點之一,對于 Makefile 說明,我會單獨分專欄進行說明介紹,那本文我們剛剛接觸,我們寫一個簡單的 Makefile 來編譯文章開頭我們示例的3個文件。

直接先寫一個傻瓜式的,看看 make 工具是否有用,在示例 .c 文件同目錄下,我們新建一個 Makefile 文件,如下:

圖片

然后試著使用 make 命令看看效果:

圖片

OK,果然可以 make 直接編譯,但是上面這個 Makefile 是有問題的,因為每次執行 make ,會把所有的 .c 文件都重新編譯器一次,實際使用也不可能這么寫。

我們回憶一下上一篇課程的內容,一個C 文件要經過預處理、編譯、匯編 和 鏈接才能變成可執行文件,由不同的 .c 文件生成到不同的 .o 文件,最終才將所有的 .o 文件鏈接成可執行文件。

所以我們可分開進行,把每一個 .c 先生成 .o 文件,然后再由 所有的 .o 文件生成 最終的文件,這樣如果單獨修改了某個文件 ,只需要把修改過的 .c 文件重新編譯就行了,所以我們的 Makefile 應該這么寫:

圖片

make 的結果如下:

圖片

這樣寫得好處就是,如果我們只對某一個.c 文件進行修改,他只會對修改過的文件進行重新編譯,我們可以測試一下,比如我們修改一下 a.c 文件:

圖片

上面這個簡單的 Makefile ,大家是不是已經可以感覺到 make 工具的方便快捷了!

結語

本文向大家介紹了一下 Linux 編程時候使用的 make 工具,如何在沒有 IDE 工具的 Linux 環境下高效快捷的編譯工程,就靠 make 工具了。

當然,我們的重點在于 Makefile,對于 Makefile 的寫法規則,更多的內容我會單獨寫文章說明的。

對于入門的小伙伴來說,也沒有必要一蹴而就,寫好 Makefile 固然重要,但是對于現在一般的應用開發來說,Makefile 要完全自己從頭寫得時候不多,很多時候可以找到一個可用的模板進行修改,我們至少要做到可以看懂,可以去修改 Makefile!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11496

    瀏覽量

    213234
  • 編程
    +關注

    關注

    88

    文章

    3686

    瀏覽量

    95033
  • 編譯器
    +關注

    關注

    1

    文章

    1659

    瀏覽量

    50049
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linuxautomake應用

    linux 環境,當項目工程很大的時候,編譯的過程很復雜,所以需要使用 make 工具,自動進行編譯安裝,但是手寫 makefile 文件
    的頭像 發表于 08-24 15:10 ?2982次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b>automake應用

    #硬聲創作季 #LinuxLinux-1.16 make工具Makefile的引入-1

    LinuxMakefile
    水管工
    發布于 :2022年11月10日 17:19:02

    #硬聲創作季 #LinuxLinux-1.16 make工具Makefile的引入-2

    LinuxMakefile
    水管工
    發布于 :2022年11月10日 17:19:22

    使用嵌入式Linux開發工具多文件Makefile的編寫

    #上節課回顧:嵌入式Linux開發工具:-gcc 、gdb、make學習目標:了解gdb;編寫makefile (.c --.o) – Linux
    發表于 11-05 08:48

    迅為龍芯2K1000開發板Linux工具make工具Makefile文件

    make,然后報錯了, 因為我沒有告訴 make 這個工具它按照什么規則來編譯我們的程序。 如下圖所示。2 Makefile文件Makefile
    發表于 12-07 11:03

    嵌入式Linux開發工具-gcc、gdb、make學習目標

    嵌入式系統課堂小結3.24嵌入式Linux開發工具-gcc、gdb、make學習目標:了解gdb學習目標:編寫makefile(.c–.o)–Lin
    發表于 12-22 07:55

    關于Linux 2.6內核Makefile的分析

    Linux在公司的推廣起到一定的推動作用,算是拋磚引玉吧! 1 Makefile組織層次 LinuxMake體系由如下幾部
    發表于 11-02 10:12 ?1次下載

    淺談Linux/Unix環境make命令解析

    無論是在Linux還是在Unix環境中,make都是一個非常重要的編譯命令。不管是自己進行項目開發還是安裝應用軟件,我們都經常要用到makemake install。利用
    發表于 11-07 10:50 ?0次下載

    Linux實現進度條程序,通過makefile進行編譯

    1. 在Linux實現進度條程序。 通過makefile進行編譯。 建議自主完成一個彩色的進度條。 寫Makefile文件的原因:Makefil
    發表于 03-12 16:31 ?2311次閱讀

    Linux使用autoconf和automake生成Makefile

    ?作為Linux的程序開發人員,一定都遇到過Makefile,用make命令來編譯自己寫的程序確實是很方便。一般情況,大
    發表于 04-02 14:41 ?353次閱讀

    Linux的GNU Make中文手冊資料免費下載

    Linux 環境的程序員如果不會使用 GNU make 來構建和管理自己的工程,應該不能算是一個合格的專業程序員,至少不能稱得上是 Unix 程序員。在 Linux(unix)環境
    發表于 06-03 08:00 ?9次下載
    <b class='flag-5'>Linux</b>的GNU <b class='flag-5'>Make</b>中文手冊資料免費下載

    WINDOWS系統使用GCC+MAKE開發MCU

    的的局限性。因為WINDOWS并沒有MAKE,造成我們所寫的MAKEFILE沒法被識別,想要在WINDOWS使用MAKEFILE又必須去
    發表于 10-28 11:06 ?15次下載
    WINDOWS系統<b class='flag-5'>下</b>使用GCC+<b class='flag-5'>MAKE</b>開發MCU

    嵌入式Linux第五周課程總結

    #上節課回顧:嵌入式Linux開發工具:-gcc 、gdb、make學習目標:了解gdb;編寫makefile (.c --.o) – Linux
    發表于 11-02 12:06 ?8次下載
    嵌入式<b class='flag-5'>Linux</b>第五周課程總結

    課堂筆記五之嵌入式Linux開發工具

    嵌入式Linux開發工具一、嵌入式Linux開發工具-gdb、make學習目標:了解gdb學習目標:編寫
    發表于 11-02 12:36 ?11次下載
    課堂筆記五之嵌入式<b class='flag-5'>Linux</b>開發<b class='flag-5'>工具</b>

    AN033 基于Linux環境Makefile工程管理

    AN033 基于Linux環境Makefile工程管理
    發表于 02-23 19:08 ?0次下載
    AN033 基于<b class='flag-5'>Linux</b>環境<b class='flag-5'>下</b>的<b class='flag-5'>Makefile</b>工程管理
    主站蜘蛛池模板: 久久久久久88色偷偷 | 色一欲一性一乱一区二区三区 | 大尺度很肉污的古代小说 | 亚洲一级毛片免观看 | 亚州怡红院 | 成人夜色视频网站在线观看 | 三级在线网址 | 在线观看你懂得 | 国产理论视频 | 天天操天天操天天操香蕉 | 禁漫羞羞a漫入口 | 欧美日本免费 | 被cao到合不拢腿腐男男 | 国产精品第页 | 午夜毛片福利 | 夜夜天天干 | 91啪免费网站在线观看 | 免费在线看视频 | 亚洲艹| 夜夜操操操 | 免费可以看黄的视频 s色 | 亚洲已满18点击进入在线观看 | 国产黄色录像视频 | 亚洲综合一区二区 | 福利毛片 | 亚洲va久久久噜噜噜久久狠狠 | 天天干夜夜骑 | 美女被啪到哭网站在线观看 | 中日韩一级片 | 91极品女神嫩模在线播放 | 天堂成人一区二区三区 | 中文字幕一区二区三 | 亚洲国产美女精品久久 | 欧美啪啪精品 | 18黄无遮挡免费视频 | 久久99热久久精品动漫 | 欧美色视频日本 | 一级特黄aaa大片免费看 | 午夜无遮挡怕怕怕免费视频 | 亚洲免费网站 | 国产资源站 |