makefile 就是目標檔案加上依賴檔案
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
規則targets (目標) :prerequisites(依賴)
command(命令)
.makefile 由若干條的規則構成
.每個規則又是這樣的:
targets (目標) :prerequisites(依賴)
command(命令)
rule1
rule2
rule3
在命令前加@就不會輸出命令
例: @gcc …
偽目標沒有依賴檔案,不會在磁碟上建立檔案只會執行命令
如: clean:
rm fun1.o fun2.o main.o hello
.phony:偽目標名
偽目標:
命令為了防止當前資料夾下有同名的檔案
變數定義 mobj = main.o func1.o func2.o
$(變數名)用變數 gcc $(mobj) -o hello
預定義變數:
ar 庫檔案維護程式的名稱,預設值為ar
as 匯程式設計序的名稱,預設值為as
cc c編譯器的名稱,預設值為cc
cxx c++編譯器名稱,預設值為g++
arflags 庫檔案維護程式選項,無預設值
cflags c編譯器選項,無預設值
cxxflags c++編譯器選項,無預設值
例:cflags = -g -c -wall
cc = gcc
$(cc) $(cflags) func2.c
//換編譯器時只需改 變數cc的值
自動變數及環境變數
$* 不包含副檔名的目標檔名稱
$< 第乙個依賴檔名稱
$@ 目標檔案完整名稱
$^ 所有不重複的依賴檔案
例: hello:$(mobj)
gcc $^ -o $@
make 工作流程
1、make會在當前目錄下找名字叫」makefile」或」makefile」的檔案。
2、如果找到,它會找檔案中的第乙個目標檔案(target)並把這個檔案作為最終的目標檔案
3、根據時間戳生成目標檔案
4、遞迴去尋找目標檔案依賴檔案,並且遞迴生成(同樣有時間戳問題)。
包含:include 另乙個makefile檔名 聯合編
巢狀subsystem:
cd subdir &&gcc -c main.c
等價於:subsystem:
gcc -c main.c -c subdir
意思是先進入「subdir」目錄,然後執行make
條件判斷
ifeq( , )
命令else
命令endif
makefile 管理命令
-c dir 讀入指定目錄下面的makefile
-f file 讀入當前目錄下的file檔案為makefile
-i 忽略所有命令執行錯誤
-i dir 指定被包含的makefile所在目錄
makefile學習筆記 makefile概述
20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...
Makefile學習筆記
makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...
Makefile學習筆記
本文為學習筆記,僅供參考,如有好的建議歡迎指出!makefile規則 目標檔案 依賴檔案 tab 命令 命令前必須有乙個tab exp test main.c gcc main.c o test 隱式規則 o c 同名匹配 變數 類似於c中的巨集,引用方式 arg 變數名 值 引用變數可在之後定義 ...