單目錄下多檔案 makefile編寫

2021-09-06 23:22:44 字數 1776 閱讀 8072

makefile很久就接觸過了,但是一直沒怎麼深入的去學習和總結;在專案中我也只是看看makefile或者修改部分語句,全部自己動手寫的話還真沒有;知識在於沉澱,這句說的非常好,所以現在把自己理解的東西,記錄下來,以便後面查閱;

這篇blog要分享的是在單目錄下多檔案的makefile編寫,首先說明當前目錄下有多少檔案:fun.h   fun.c  main.c  makefile;其中*.c 檔案都要依賴 *.h檔案;

首先常規編譯:

預處理期:gcc  -e  -o fun.i  fun.c   

編譯階段:gcc  -s  -o fun.s fun.i   

彙編階段: gcc  -c  -o fun.o fun.s   

這就是gcc的各個編譯階段(標頭檔案在當前目錄下,會直接搜尋到),下面用makefile來編譯下;

第一版的makefile:

[cpp]view plain

copy

cc = gcc   

cflags = -g -wall  

objects = main.o fun.o  

main:main.o fun.o   

$(cc) -o main main.o fun.o  

main.o:main.c  

$(cc) $(cflags) -c main.c -o main.o  

fun.o:fun.c   

$(cc)  $(cflags) -c fun.c -o fun.o  

clean:  

rm -rf $(objects) main  

上面第一版就是根據gcc命令列湊成的,第二版將會使用makefile的自動推導功能;

比如:fun.o:fun.c

$(cc)  $(cflags) -c fun.c -o fun.o

當已知目的檔案為 fun.o時,makefile會自動推導出依賴檔案為fun.c並且編譯規則也會自動推導,所以只需要註明依賴的標頭檔案就可以;可以利用makefile自動推導特點簡化為:fun.o:fun.h就可以了;

第二版makefile

[cpp]view plain

copy

cc = gcc   

cflags = -g -wall  

objects = main.o fun.o  

main:$(objects)  

$(cc) -o main $(objects)  

main.o:fun.h  

fun.o:fun.h  

clean:  

rm -rf $(objects) main  

其實上面的makefile已經寫的非常簡潔了,如果還需要簡單的話可以再簡化些:

[cpp]view plain

copy

cc = gcc   

cflags = -g -wall  

objects = main.o fun.o  

main:$(objects)  

#$(objects):fun.h  //可以有,也可以沒有  

phony:clean  

clean:  

rm -rf $(objects) main  

其中.phony是用來說明後面的名稱不是乙個檔案,主要用來區分同名檔案(如果有乙個檔名為clean檔案,那麼clean:下的規則就會無效);

若有不正確之處,望大家指正,共同學習!謝謝!!!

單目錄下多檔案 makefile編寫

makefile很久就接觸過了,但是一直沒怎麼深入的去學習和總結 在專案中我也只是看看makefile或者修改部分語句,全部自己動手寫的話還真沒有 知識在於沉澱,這句說的非常好,所以現在把自己理解的東西,記錄下來,以便後面查閱 這篇blog要分享的是在單目錄下多檔案的makefile編寫,首先說明當...

多目錄下多檔案 makefile編寫

前面已經分享了單目錄項下多檔案的makefile的編寫,現在來看看多目錄下多檔案makefile的編寫 在做專案時,一般檔案都會分幾個目錄來存放 基本的是 include bin src obj lib tools 這幾個檔案 我先說下我的檔案存放目錄,用ls r可以檢視到所有檔案 include ...

makefile 編譯當前目錄下的檔案

makefile 2018 10 23 build all c file 目標檔案 所有的依賴檔案 第乙個依賴檔案。版本號 version v1.0.0 編譯器版本 cc arm none linux gnueabi gcc 指定目錄下的原始檔,srcs wildcard c srcs wildca...