從零開始學習嵌入式----Makefile工具


?

一、Makefile 簡明指南

?

? ? ? ? 你是否曾經面對過一堆源代碼文件,卻不知道如何將它們編譯成可執行文件?或者你是否厭倦了每次修改代碼后都要手動輸入冗長的編譯命令?

?

? ? ? ? 如果是的話,那么 Makefile 就是你的救星!

?

二、Makefile 是什么?

?

? ? ? ? Makefile 就像是一個項目的「菜譜」,它告訴計算機如何將你的源代碼文件「烹飪」成可執行文件。它使用一種簡單易懂的語法來定義文件之間的依賴關系以及編譯規則。

?

三、Makefile 的基本結構

?

? ? ? ? 一個簡單的 Makefile 文件包含了一系列規則,每個規則通常由以下三個部分組成:

?

1)目標 (target):?你想要生成的文件,例如可執行文件或者目標文件。

2)依賴 (prerequisites):?生成目標文件所依賴的其他文件,例如源代碼文件或者頭文件。

3)命令 (commands):?生成目標文件需要執行的命令,例如編譯命令或者鏈接命令。

?

以下是一個簡單的例子:

?

myprogram: main.o utils.ogcc main.o utils.o -o myprogram#??#
main.o: main.c utils.hgcc -c main.c#??#
utils.o: utils.c utils.hgcc -c utils.c

?

在這個例子中,我們定義了三個規則:

?

1)第一個規則的目標是生成可執行文件?myprogram,它依賴于?main.o?和?utils.o?兩個目標文件。生成?myprogram?的命令是使用?gcc?鏈接器將這兩個目標文件鏈接起來。

2)第二個規則的目標是生成目標文件?main.o,它依賴于?main.c?和?utils.h?兩個文件。生成?main.o?的命令是使用?gcc?編譯器編譯?main.c?文件。

3)第三個規則的目標是生成目標文件?utils.o,它依賴于?utils.c?和?utils.h?兩個文件。生成?utils.o?的命令是使用?gcc?編譯器編譯?utils.c?文件。

?

四、如何使用 Makefile?

?

? ? ? ? 要使用 Makefile, 只需要在終端中輸入?make?命令即可。?make?命令會自動讀取當前目錄下的 Makefile 文件,并執行相應的規則來生成目標文件。

?

五、Makefile 的優勢

?

使用 Makefile 可以帶來以下優勢:

?

1)自動化構建過程:?你只需要編寫一次 Makefile 文件,就可以自動完成項目的編譯、鏈接等操作,大大提高開發效率。

2)跟蹤文件依賴關系:?Makefile 可以自動跟蹤文件之間的依賴關系,只有當依賴文件發生改變時才會重新編譯相應的目標文件,避免了不必要的編譯時間。

3)提高代碼可維護性:?Makefile 可以清晰地描述項目的構建過程,使代碼更加易于維護和理解。

?

?

六、總結

?

? ? ? ? Makefile 是一個強大的工具,可以幫助你簡化項目的構建過程,提高開發效率。希望這篇簡明指南能夠幫助你入門 Makefile,并開始享受它帶來的便利。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45080.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎?

全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎? 摘要: 本文主要介紹了Python中類和對象中的類方法和靜態方法,以及類方法和靜態方法的定義、特點、應用場景和使用方…

網安防御保護-小實驗

1、DMZ區內的服務器,辦公區僅能在辦公時間內(9:00-18:00)可以訪問,生產區的設備全天可以訪問 2、生產區不允許訪問互聯網,辦公區和游客區允許訪問互聯網 3、辦公區設備10.0.2.10不允許訪問DMZ區的FTP服務器和HTTP服務器,僅能ping通…

vue 環境變量那些事

常見的項目環境變量的使用 總則:使用 .env.環境名字文件去定義,運行命令的時候指定環境 比如:.env 代表所有環境變量使用的一些變量 .env.development 代表的開發環境變量 .env.production 代表的生產環境變量也就是上線以后使用的 vitevu…

自主研發接口測試框架

測試任務:將以前完成的所有的腳本統一改寫為unitest框架方式 1、需求原型 1.1 框架目錄結構 V1.0:一般的設計思路分為配置層、腳本層、數據層、結果層,如下圖所示 V 2.0:加入驅動層testdriver 1.2 框架各層需要完成的工作 1、配…

Fast DDS library windows 下源碼編譯(cmake)

目錄 編譯環境: 編譯需要的源碼文件: Fast DDS編譯: 注意事項: 參考文檔: 基于Fast DDS 的源碼來編譯相關的庫,然后可以通過python 來調用庫文件實現dds 數據通信,本文就詳細的介紹編譯過程…

機器學習筑基篇,容器調用顯卡計算資源,Ubuntu 24.04 快速安裝 NVIDIA Container Toolkit!...

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ] Ubuntu 24.04 安裝 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用戶能夠構建和運行 GPU 加速的容器,該工具包括一個容器運行時庫和實用程序,用于自動…

石油巨頭受沖擊!埃克森美孚、BP接連發出盈利預警

KlipC報道:近日,BP(英國石油)預計其第二季度將面臨10億至20億美元的減值費用,并發出警告稱其煉油利潤率“大幅下降”,石油交易收益預計出現疲軟。消息公布后,其股價下跌超4%。 由于中間餾分油利…

JavaScript(8)——函數

函數 function,是被設計執行特定任務的代碼塊。 函數可以把具有相同或相似邏輯的代碼包裹起來,通過函數調用執行這些代碼,這么做的優勢有利于精簡代碼方便復用。類似于alert(),prompt()和console.log(),這些都是js函數,不過已經…

STL(一)

書寫形式:string (const string& str, size_t pos, size_t len npos); 舉例: int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//從下標為0開始向后5個字符&…

如何在 Python 中創建一個類似于 MS 計算器的 GUI 計算器

問題背景 假設我們需要創建一個類似于微軟計算器的 GUI 計算器。這個計算器應該具有以下功能: 能夠顯示第一個輸入的數字。當按下運算符時,輸入框仍顯示第一個數字。當按下第二個數字時,第一個數字被替換。 解決方案 為了解決這個問題&am…

華為OD機考題(HJ108 求最小公倍數)

前言 經過前期的數據結構和算法學習,開始以OD機考題作為練習題,繼續加強下熟練程度。 描述 正整數A和正整數B 的最小公倍數是指 能被A和B整除的最小的正整數值,設計一個算法,求輸入A和B的最小公倍數。 數據范圍:1≤…

Spring中的適配器模式和策略模式

1. 適配器模式的應用 1.1適配器模式(Adapter Pattern)的原始定義是:將一個類的接口轉換為客戶期望的另一個接口,適配器可以讓不兼容的兩個類一起協同工作。 1.2 AOP中的適配器模式 在Spring的AOP中,使用Advice&#…

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM處理器采用了先進的14LPCFinFET工藝,提供更快的速度和更高的電源效率;四核Cortex-A53,單核Cortex-M4,多達五個內核 ,主頻高達1.8GHz,2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…

集群管理腳本

虛擬機集群管理腳本 文章目錄 虛擬機集群管理腳本一、遠程調用腳本(remote_call.sh)二、遠程復制目錄腳本(remote_copy.sh) 一、遠程調用腳本(remote_call.sh) 如果有傳命令參數,則執行該命令;如果沒有傳命令參數,則不執行。 #!/bin/bashcm…

【嵌入式Linux】<知識點> GDB調試(更新中)

文章目錄 前言 一、GDB調試預備工作 二、GDB的啟動與退出 三、GDB中查看源代碼 四、GDB斷點操作 五、GDB調試指令 前言 在專欄【嵌入式Linux】應用開發篇_Linux打工仔的博客中,我們已經寫了大量的源程序。但是在調試這些程序時我們都是通過printf大法和肉眼除…

評估指標:精確率(Precision)、召回率(Recall)、F1分數(F1 Score)

評估指標:精確率(Precision)、召回率(Recall)、F1分數(F1 Score) 前言相關介紹1. 準確率(Accuracy)2. 精確率(Precision)3. 召回率(Re…

Cadence23打開與關閉飛線,修改位號絲印大小

打開與關閉所有飛線: 顯示部分飛線: 單獨顯示網絡飛線尤為好用,點擊上圖中的網絡,之后鼠標點擊器件中你想高亮的網絡即可單獨打開部分飛線。 這里的關閉部分網絡的飛線也很好用,可以臨時關閉討厭的GND飛線&#xff1a…

掌握Postman的API請求模板:一鍵生成,效率倍增

📘 掌握Postman的API請求模板:一鍵生成,效率倍增 Postman是API開發和測試的瑞士軍刀,而其請求模板功能更是提升工作效率的利器。API請求模板允許用戶定義一組可重用的請求配置,從而快速生成和發送API請求。本文將深入…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下:這里使用的是主機host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

TF卡病毒是什么?如何防范和應對?

在存儲芯片及存儲卡領域,TF卡病毒是一個備受關注的話題。在本文中,拓優星辰將詳細解釋TF卡病毒的含義、來源以及如何防范和應對這一問題,幫助客戶更好地了解和處理TF卡病毒的風險。 1. TF卡病毒的含義 TF卡病毒是指針對TF存儲卡(T…