国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式 Linux 入門(十一、make 和 MakeFile)

這篇具有很好參考價值的文章主要介紹了嵌入式 Linux 入門(十一、make 和 MakeFile)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

嵌入式 Linux 入門第十一課,Make 工具和 Makefile 的引入...... 矜辰所致

前言

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

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

?? 嵌入式 Linux 入門系列博文:
嵌入式 Linux 入門(一、Linux 基本介紹及文件結(jié)構(gòu))
嵌入式 Linux 入門(二、Linux 文件系統(tǒng)、文件類型及權(quán)限管理)
嵌入式 Linux 入門(三、Linux Shell 及常用命令說明)
嵌入式 Linux 入門(四、Linux 下的編輯器 — 讓人愛恨交加的 vi )
嵌入式 Linux 入門(五、Shell 腳本編程上:認識 Shell 腳本)
嵌入式 Linux 入門(六、Shell 腳本編程下:Shell 腳本語法)
嵌入式 Linux 入門(七、Linux 下的環(huán)境變量)
嵌入式 Linux 入門(八、Linux 下的軟件安裝)
嵌入式 Linux 入門(九、Linux 下的磁盤管理)
嵌入式 Linux 入門(十、Linux 下的 C 編程)
.
嵌入式 Linux 環(huán)境搭建系列博文:嵌入式 Linux 環(huán)境篇
.
我是矜辰所致,全網(wǎng)同名,盡量用心寫好每一系列文章,不浮夸,不將就,認真對待學(xué)知識的我們,矜辰所致,金石為開!

一、Linux 下多文件編譯

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

gcc [目標文件] -o [想要生產(chǎn)的文件名字]

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

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

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

編譯的方式如下圖:

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

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

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

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

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

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

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

二、make 工具和 Makefile

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

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

2.1 make 和 Makefile 是什么?

make 工具:

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

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

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

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

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

Makefile 文件:

Makefile 是一個文件,是一個描述一系列規(guī)則的文件。

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

make 會根據(jù) Makefile 文件的規(guī)則規(guī)則執(zhí)行命令,最后完成編譯輸出 。

在 Makefile 文件中:

  • 定義一系列的規(guī)則來制定源文件編譯后的先后順序
  • 特定的語法規(guī)則、支持函數(shù)定義、函數(shù)調(diào)用
  • 能直接集成操作系統(tǒng)中的命令

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

2.2 通過 STM32 提前熟悉 Makefile

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

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

在window下使用 VScode 搭建 ARM 開發(fā)環(huán)境

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

2.3 GCC 與 make 的關(guān)系/區(qū)別?

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

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

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

在 Makefile 中我們會指定執(zhí)行編譯的編譯器類型,而且會根據(jù)指定的編譯器類型進行對應(yīng)的命令操作,如下圖:

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

三、一個簡單的 Makefile

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

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

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

所以我們可分開進行,把每一個 .c 先生成 .o 文件,然后再由 所有的 .o 文件生成 最終的文件,這樣如果單獨修改了某個文件 ,只需要把修改過的 .c 文件重新編譯就行了,所以我們的 Makefile 應(yīng)該這么寫:
嵌入式 Linux 入門(十一、make 和 MakeFile)

make 的結(jié)果如下:

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

嵌入式 Linux 入門(十一、make 和 MakeFile)

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

結(jié)語

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

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

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

好了,本文就到這里,謝謝大家!文章來源地址http://www.zghlxwxcb.cn/news/detail-457127.html

到了這里,關(guān)于嵌入式 Linux 入門(十一、make 和 MakeFile)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【ARM 嵌入式 編譯 Makefile 系列 2 - Makefile 如何打印信息】

    請閱讀 【ARM GCC Makefile 編譯專欄導(dǎo)讀】 下篇文章:【ARM 嵌入式 編譯 Makefile 系列 2.1 - Makefile info,warn, error 打印詳細介紹】 上篇文章:【ARM 嵌入式 編譯 Makefile 系列 1 - Makefile 如何調(diào)用 shell 腳本】 在Makefile中,我們可以使用echo命令來打印信息。這種方法適用于大多數(shù)的 UNI

    2024年02月12日
    瀏覽(47)
  • 【ARM 嵌入式 編譯 Makefile 系列 16 - Makefile 偽目標.PHONY 與 FORCE 詳細介紹】

    請閱讀 【ARM GCC Makefile 編譯專欄導(dǎo)讀】 .PHONY 是GNU make的一個特殊目標,它用來指定那些不產(chǎn)生文件的目標。如果一個目標被聲明為 .PHONY ,那么make命令會忽略這個目標的文件名,即使在文件系統(tǒng)中存在同名的文件,make命令也會每次都執(zhí)行這個目標的命令 在 Makefile 中, 目標

    2024年02月12日
    瀏覽(44)
  • 嵌入式 Linux 入門(一、Linux 基本介紹及文件結(jié)構(gòu))

    嵌入式 Linux 入門(一、Linux 基本介紹及文件結(jié)構(gòu))

    學(xué)習(xí)嵌入式 Linux,首先我們得知道什么是Linux,什么是嵌入式Linux,有一些基本概念就先得先了解。 基本的說明介紹完,我們第一篇先來了解一下 Linux 的文件結(jié)構(gòu)。 本文就簡單的說明一些必要的基本概念,以及介紹一下 Linux 的文件結(jié)構(gòu)。但是呢,既然是自己寫博文,除非專

    2024年04月13日
    瀏覽(20)
  • 實時嵌入式Linux設(shè)備基準測試快速入門1介紹

    實時嵌入式Linux設(shè)備基準測試快速入門1介紹

    工業(yè)4.0已經(jīng)到來,生產(chǎn)線需要新技術(shù)來應(yīng)對客戶日益增長的新功能需求,使用配備嵌入式 Linux 的單板計算機來處理所需的許多功能是大勢所趨。這樣大多數(shù)工業(yè)控制系統(tǒng)都需要實時性能,開發(fā)人員不得不面對這樣一個事實:Linux原本并不適用于實時環(huán)境。不過多年來很多人都

    2024年02月15日
    瀏覽(16)
  • 嵌入式C編譯工具:gcc/make/Autotools/cmake

    gcc時GNU編譯套件,一種編譯器,可以編譯c,c++,java等語言。當只有一個文件時,使用gcc編譯器就很方便,但是當有多個文件時,編譯順序以及包含關(guān)系等使用gcc很麻煩。 make工具:make就相當于一個智能的批處理工具,通過調(diào)用makefile實現(xiàn)編譯,在makefile規(guī)定編譯以及鏈接的順序

    2024年02月02日
    瀏覽(18)
  • 實時嵌入式Linux設(shè)備基準測試快速入門4測試和測量

    實時嵌入式Linux設(shè)備基準測試快速入門4測試和測量

    本章將介紹主要測試方案及其具體配置和結(jié)果。在介紹實際測量結(jié)果之前,將盡可能總結(jié)被測設(shè)備的特性。最后,將對結(jié)果進行分析,并概述由于高速緩存一致性問題造成的延遲方面的主要瓶頸,提出減少延遲的解決方案,并解釋用于發(fā)現(xiàn)和緩解問題的方法。 用于智能設(shè)備的

    2024年02月15日
    瀏覽(21)
  • 【嵌入式Qt開發(fā)入門】初識Qt——Linux下安裝Qt

    【嵌入式Qt開發(fā)入門】初識Qt——Linux下安裝Qt

    ????????Qt 是一個跨平臺的 C++開發(fā)庫。主要用來開發(fā)圖形用戶界面(Graphical User Interface,簡 稱 GUI)程序。 ????????Qt 雖然經(jīng)常被當做一個 GUI 庫,用來開發(fā)圖形界面應(yīng)用程序,但這并不是 Qt 的全部; Qt 除了可以繪制漂亮的界面(包括控件、布局、交互),還包含很多

    2024年02月16日
    瀏覽(94)
  • 【C語言】嵌入式C語言項目管理利器:深入理解Makefile的應(yīng)用與實踐

    【C語言】嵌入式C語言項目管理利器:深入理解Makefile的應(yīng)用與實踐

    目錄 一、makedile的概述 1、案例引入 2、makefile? 3、Makefile優(yōu)點 二、makefile的語法規(guī)則? 1、語法規(guī)則 2、簡單實戰(zhàn) 三、makefile的變量 1、自定義變量 2、系統(tǒng)環(huán)境變量 3、預(yù)定義變量 4、高級makefile gcc a.c b.c c.c ‐o main 如果只修改了b.c 使用gcc編譯 需要對所有文件重新編譯。makefi

    2024年02月15日
    瀏覽(23)
  • Linux嵌入式學(xué)習(xí)之Ubuntu入門(二)磁盤文件介紹及分區(qū)、格式化等

    Linux嵌入式學(xué)習(xí)之Ubuntu入門(二)磁盤文件介紹及分區(qū)、格式化等

    Linux嵌入式學(xué)習(xí)之Ubuntu入門(一)基本命令、軟件安裝、文件結(jié)構(gòu)、編輯器介紹 Linux嵌入式學(xué)習(xí)之Ubuntu入門(二)磁盤文件介紹及分區(qū)、格式化等 Linux嵌入式學(xué)習(xí)之Ubuntu入門(三)用戶、用戶組及文件權(quán)限 Linux嵌入式學(xué)習(xí)之Ubuntu入門(四)Makefile Linux嵌入式學(xué)習(xí)之Ubuntu入門(五

    2023年04月11日
    瀏覽(143)
  • 基于ubuntu的STM32嵌入式軟件開發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫

    基于ubuntu的STM32嵌入式軟件開發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫

    ????????本文主要介紹基于標準庫函數(shù)移植的STM32的應(yīng)用軟件工程的修改,主要涉及到文件內(nèi)容修改、Makefile文件編寫、編譯腳本編寫等內(nèi)容,其中編譯腳本是基于arm-none-eabi-gcc的交叉編譯器撰寫的。程序親測可以正常編譯,生成.bin和.hex的可燒錄鏡像文件。 1.首先修改 pr

    2023年04月15日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包