C學習筆記 makefile

2021-09-16 12:28:26 字數 2731 閱讀 5521

除非最簡單的專案,任何乙個商業專案都會包含多個源**,而且在編譯的時候會有很長很複雜的指令,為了編譯的簡單可行,makefile由此而生,在編譯時候直接輸入make便會按照makefile裡面的規則編譯源**。android的源**就是通過makefile管理的。

make通過makefile得到編譯規則,從而編譯原始檔

makefile是以乙個文字形式的指令碼告訴make編譯器如何以及怎麼編譯源**,裡面包含了編譯規則

makefile規則遵循以下通用格式

target:dependency [dependency[···]

]command

command

[···]

每個command第乙個字元必須是tab鍵,而不是空格鍵,不然make會報錯並停止

start:

gcc -o test test.c

start:test.o

gcc -o test test.o

test.o:

gcc -o test.o -c test.c

說明:target start後面的test.o代表其下的command依賴與test.o這個target。所以make先執行了test.o這個target下的command,如果存在test.o,那麼makefile會去檢視.c檔案的修改時間,再決定編不編譯.c檔案

start:test.o

gcc -o test test.o

test.o:

gcc -o test.o -c test.c

clean:

rm -f test.o

說明:增加clean標籤,其後面的指令會在輸入make clean時候執行

start:test.o

gcc -o test test.o

@echo '----------ok----------'

test.o:

gcc -o test.o -c test.c

clean:

rm -f test.o

varname=some_text
把變數用括號括起來,前面加$就可以引用該變數的值

$(varname)

按照慣例makefile的變數都是大寫(只是習慣而已,不是必須的)

cc=gcc

srcs=test.c

objs=test.o

exec=test

start:test.o

$(cc)

-o $(exec)

$(objs)

@echo '----------ok----------'

$(objs)

:$(cc)

-o $(objs)

-c $(srcs)

clean:

rm -f $(objs)

objs可以簡化為以下形式,相當於把.c替換為.o

objs=

$(srcs:.c=.o)

.suffixes:.c .o

cc=gcc

srcs=test.c

objs=

$(srcs:.c=.o)

exec=test

start:test.o

$(cc)

-o $(exec)

$(objs)

@echo '----------ok----------'

.c.o:

$(cc)

-o $@ -c $<

clean:

rm -f $(objs)

模式規則

.suffixes:.c .o
表示任何x.c檔案與x.o關聯,make定義了一條規則,任何x.o檔案都從 x.c編譯而來

.c.o
make定義了一些有用的預定義變數

變數名含 義

$@規則的目標所對應的檔名

$<規則中的第乙個相關檔名

.suffixes:.c .o

cc=gcc

srcs=test.c \

a.cobjs=

$(srcs:.c=.o)

exec=test

start:test.o

$(cc)

-o $(exec)

$(objs)

@echo '----------ok----------'

.c.o:

$(cc)

-o $@ -c $<

clean:

rm -f $(objs)

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