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

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

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

【Makefile】簡單實用的Makefile模板來了

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

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

這個Makefile主要解決以下需求:

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

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

#######################################################################################################
# 需求:
#1.編譯輸出的所有文件均放在一個output目錄,.o文件的相對目錄應(yīng)與源碼的位置保持一致;
#2.需要生成每個.c文件的頭文件依賴,當.c文件未xxxx.c時,.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點擊并拖拽以移動

編輯

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

img點擊并拖拽以移動

編輯

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

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


延伸閱讀:

1.【Linux + Makefile】十分鐘教你學會Makefile的FORCE

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

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

    關(guān)注

    0

    文章

    108

    瀏覽量

    20542
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19153
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    Makefile中文教程 -下載

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

    駕馭Makefile

    駕馭Makefile在網(wǎng)上你能找到很多關(guān)于Makefile的學習資料,但絕大部分給你的只是一個知識點,與將Makefile運用到項目中(尤其是大型項目)的差距非常的大。因為,將Makefile
    發(fā)表于 01-05 17:05 ?9次下載

    跟我一起學makefile

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

    linux makefile教程

     什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makefile
    發(fā)表于 11-12 09:11 ?5266次閱讀

    makefile的基本語法

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

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

    Makefile的重要性 會不會寫makefile,從一個側(cè)面說明了一個人是否具備完成大型工程的能力 makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件
    發(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)典教程免費下載

    Makefile的項目模板免費下載

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

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

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

    芯片設(shè)計中的Makefile簡單教程

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

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

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

    一個STM32編譯Makefile模板

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

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

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

    Makefile】通用模板

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

    三個Makefile模板分享

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