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...