0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【Makefile】簡(jiǎn)單實(shí)用的Makefile模板來了

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-08-31 12:46 ? 次閱讀

今天給大家介紹一個(gè)簡(jiǎn)單實(shí)用的Makefile模板,也可以當(dāng)做學(xué)習(xí)Makefile核心內(nèi)容的范例,里面都有詳細(xì)的注釋,清晰明了。

這個(gè)Makefile主要解決以下需求:

###################################################################################### # 需求: #1.編譯輸出的所有文件均放在一個(gè)output目錄,.o文件的相對(duì)目錄應(yīng)與源碼的位置保持一致; #2.需要生成每個(gè).c文件的頭文件依賴,當(dāng).c文件為xxxx.c時(shí),.o文件名為xxx.o,頭文件依賴文件名為.xxx.o.d ######################################################################################

廢話不多說,直接上內(nèi)容:

#######################################################################################################
# 需求:
#1.編譯輸出的所有文件均放在一個(gè)output目錄,.o文件的相對(duì)目錄應(yīng)與源碼的位置保持一致;
#2.需要生成每個(gè).c文件的頭文件依賴,當(dāng).c文件未xxxx.c時(shí),.o文件名為xxx.o,頭文件依賴文件名為.xxx.o.d 
#######################################################################################################

# 定義輸出目錄
OUTPUT		:= output
OUTPUT_BIN	:= $(OUTPUT)/test

# 定義.c文件列表
SRC-C		+= ./src/main.c 
SRC-C		+= ./src/test1/test1.c 
SRC-C		+= ./src/test2/test2.c 
SRC-C		+= ./src/test3/test3.c 

# 求出.o文件列表 
SRC-O		+= $(patsubst %.c, $(OUTPUT)/%.o, $(SRC-C))

# 求出.o文件的頭文件依賴列表  # output/./src/test1/test1.o ==> output/./src/test1/.test1.o.d
SRC-O-DEPS	+= $(foreach n, $(SRC-O), $(dir $(n)).$(notdir $(n).d))

# Entry for Makefile
all: info gen_output gen_bin 
	@echo 
	@echo Generate $(OUTPUT_BIN) done !
	@echo 

# Show some variables	
info:
	@echo 
	@echo SRC-C=$(SRC-C)
	@echo SRC-O=$(SRC-O)
	@echo SRC-O-DEPS=$(SRC-O-DEPS)
	@echo 

# Generate output bin
gen_bin: $(SRC-O) $(SRC-O-DEPS)
	touch $(OUTPUT_BIN)

# Create .o files	
$(OUTPUT)/%.o:
	test -d $(dir $@) || mkdir -p $(dir $@)
	touch $@
	
# Create .o dependent files
$(OUTPUT)/.%.o.d: 
	touch $@

# Create output path when it's not exist !	
gen_output:
	test -d $(OUTPUT) || mkdir -p $(OUTPUT)

# Clean builded output files	
clean:
	rm -rf $(OUTPUT)
	
.PHONY: info gen_output clean

工程的文件目錄結(jié)構(gòu)如下圖:

img點(diǎn)擊并拖拽以移動(dòng)

編輯

工程目錄執(zhí)行make即可開始編譯,執(zhí)行make clean即可清除編譯文件。

img點(diǎn)擊并拖拽以移動(dòng)

編輯

值得注意的是,Makefile里面都是模擬生成.o .o.d .bin等文件,在實(shí)際工程運(yùn)用中,需要根據(jù)自己的實(shí)際情況加以修改。

使用過程如有發(fā)現(xiàn)問題,可在評(píng)論席提出,期待您的寶貴建議,謝謝。


延伸閱讀:

1.【Linux + Makefile】十分鐘教你學(xué)會(huì)Makefile的FORCE

\2. 【Linux + Makefile】Makefile的高階用法:解決C文件包含的頭文件修改了,但C文件不重新編譯的問題

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模板
    +關(guān)注

    關(guān)注

    0

    文章

    108

    瀏覽量

    20545
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19158
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux系統(tǒng)中Makefile的使用方法

    的基礎(chǔ)用法講起,逐步深入到更高級(jí)的應(yīng)用,為你呈現(xiàn)一個(gè)全面而詳細(xì)的Makefile使用手冊(cè)。 第一:Makefile的基本結(jié)構(gòu) 一個(gè)最簡(jiǎn)單Makefile包含規(guī)則,規(guī)則由目標(biāo)(targ
    的頭像 發(fā)表于 05-11 08:49 ?583次閱讀

    Makefile中文教程 -下載

    Makefile中文教程,免費(fèi)下載哦。
    發(fā)表于 03-25 08:57 ?67次下載

    駕馭Makefile

    駕馭Makefile在網(wǎng)上你能找到很多關(guān)于Makefile的學(xué)習(xí)資料,但絕大部分給你的只是一個(gè)知識(shí)點(diǎn),與將Makefile運(yùn)用到項(xiàng)目中(尤其是大型項(xiàng)目)的差距非常的大。因?yàn)?,?b class='flag-5'>Makefile
    發(fā)表于 01-05 17:05 ?9次下載

    跟我一起學(xué)makefile

    關(guān)于makefile學(xué)習(xí),深入了解嵌入式下makefile的編寫
    發(fā)表于 05-23 18:21 ?0次下載

    linux makefile教程

     什么是makefile?或許很多Winodws的程序員都不知道這個(gè)東西,因?yàn)槟切¦indows的IDE都為你做了這個(gè)工作,但我覺得要作一個(gè)好的和professional的程序員,makefile
    發(fā)表于 11-12 09:11 ?5285次閱讀

    makefile的基本語法

     在Makefile中,最重要的三個(gè)概念是:目標(biāo)(target)、依賴關(guān)系(dependency)和命令(command)。目標(biāo)是指要干什么,即運(yùn)行make后生成什么;依賴是指明目標(biāo)所依賴的其他目標(biāo);命令則告訴make如何生成目標(biāo),這三個(gè)概念是通過Makefile中的規(guī)則
    發(fā)表于 11-12 10:15 ?1.1w次閱讀

    Makefile是什么?Makefile工作原理是怎樣的?Makefile經(jīng)典教程免費(fèi)下載

    Makefile的重要性 會(huì)不會(huì)寫makefile,從一個(gè)側(cè)面說明了一個(gè)人是否具備完成大型工程的能力 makefile帶來的好處就是——“自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件
    發(fā)表于 09-12 17:19 ?0次下載
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎樣的?<b class='flag-5'>Makefile</b>經(jīng)典教程免費(fèi)下載

    Makefile的項(xiàng)目模板免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Makefile的項(xiàng)目模板免費(fèi)下載 可根據(jù)項(xiàng)目名稱修改。
    發(fā)表于 06-12 08:00 ?11次下載
    <b class='flag-5'>Makefile</b>的項(xiàng)目<b class='flag-5'>模板</b>免費(fèi)下載

    Linux內(nèi)核的Makefile、Kconfig和.config文件

    問題都和Makefile、Kconfig、.config有關(guān),下面簡(jiǎn)單談?wù)?b class='flag-5'>Makefile、Kconfig和.config。希望對(duì)你有啟發(fā)。 三者的作用: 簡(jiǎn)單來說就是去飯店點(diǎn)菜:Kc
    的頭像 發(fā)表于 11-12 17:31 ?2991次閱讀

    芯片設(shè)計(jì)中的Makefile簡(jiǎn)單教程

    Makefile可以根據(jù)指定的依賴規(guī)則和文件是否有修改來執(zhí)行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。
    的頭像 發(fā)表于 12-24 17:41 ?890次閱讀

    嵌入式中的Makefile應(yīng)用

    文章目錄一.Makefile 引入二. Makefile語法1.通配符2.假象目標(biāo)3.變量三.Makefile函數(shù)四.實(shí)例本文主要總結(jié)一下嵌入式開發(fā)中的Makefile,一般項(xiàng)目中都需
    發(fā)表于 11-03 17:06 ?11次下載
    嵌入式中的<b class='flag-5'>Makefile</b>應(yīng)用

    一個(gè)STM32編譯Makefile模板

    一個(gè)STM32編譯Makefile模板
    發(fā)表于 11-13 20:06 ?10次下載
    一個(gè)STM32編譯<b class='flag-5'>Makefile</b><b class='flag-5'>模板</b>

    MakefileMakefile與shell命令的聯(lián)系

    博主最近在項(xiàng)目實(shí)踐過程中,需要深度定制項(xiàng)目的Makefile,其中有些復(fù)雜的流程必須得借助shell腳本才能高效地完成,為此博主特意深入學(xué)習(xí)了在Makefile種調(diào)用shell命令的方法。
    的頭像 發(fā)表于 07-11 09:06 ?3319次閱讀
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>Makefile</b>與shell命令的聯(lián)系

    Makefile】通用模板

    對(duì)于上述這樣的多.c文件,又不在同一個(gè)目錄下的大型工程中,借助makefile可以來減輕工作任務(wù)
    的頭像 發(fā)表于 04-15 12:47 ?434次閱讀
    【<b class='flag-5'>Makefile</b>】通用<b class='flag-5'>模板</b>

    三個(gè)Makefile模板分享

    ????本文分享三個(gè)Makefile模板:編譯可執(zhí)行程序、編譯靜態(tài)庫、編譯動(dòng)態(tài)庫。 1 寫在前面 ????對(duì)于Windows下開發(fā),很多IDE都集成了編譯器,如Visual Studio,提供了
    的頭像 發(fā)表于 07-10 09:07 ?908次閱讀
    三個(gè)<b class='flag-5'>Makefile</b><b class='flag-5'>模板</b>分享