Makefile學習筆記

2021-09-01 18:18:32 字數 1621 閱讀 1471

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 變數名 值 引用變數可在之後定義 ...