makefile常用语法讲解(1)
From: http://www.cnblogs.com/mydomain/archive/2011/08/12/2136083.html
1、make是一個解釋makefile中指令的命令工具。Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關系并自動維護編譯工作。而makefile 文件需要按照某種語法進行編寫,文件中需要說明如何編譯各個源文件并連接生成可執行文件,并要求定義源文件之間的依賴關系。
Makefile 里主要包含了五種類型的語句/行:顯式規則、隱式規則、變量定義、文件指示和注釋。
make命令格式:make [-f Makefile] [option] [target]?
2、編譯和鏈接規則
1)如果這個工程沒有編譯過,那么我們的所有C文件都要編譯并被鏈接。
2)如果這個工程的某幾個C文件被修改,那么我們只編譯被修改的C文件,并鏈接目標程序。
3)如果這個工程的頭文件被改變了,那么我們需要編譯引用了這幾個頭文件的C文件,并鏈接目標程序。
3、makefile的構成
(1)需要由make工具創建的目標體(target),通常是目標文件或可執行文件。
(2)要創建的目標體所依賴的文件(dependency_file)。
(3)創建每個目標體時需要運行的命令(command)。
格式如下:
target:dependency_files
<TAB>command
在這里面,變量一般都是字符串,他有點像c語言的宏。
makefile中的文件指示,包含3部分,一個是在一個Makefie中引用另一個Makefile,就像c語言的include一樣;另一個是根據某些情況指定Makefile中的有效部分,就像C語言中的預編譯#if一樣;還有就是定義一個多行的命令。
注釋:注釋符用"#",可以用反斜框進行轉義,如輸入注釋,“\#”。
4、makefile的書寫
1)所有文件都在一個目錄中
示例
st_work : main.o? st_work.o? fun.o
gcc? main.o? st_work.o? fun.o? -o? st_work main (命令以Tab開頭)
st_work.o : st_work.c
gcc? -c st_work.c? -o st_work
main.o : main.c? st_work.h
gcc -c main.c -o? main.o
fun.o : fun.c fun.h
gcc -c? fun.c -o fun.o
clean:
rm -f st_work *.o
2)多目錄的寫法
我們這里,在工作目錄下有4個文件夾? 分別是 sources(源文件) obj (中間文件)headers(頭文件) bin(目標文件)
sources里面有 main.c? st_work.c fun.c
obj 里面最初沒有文件
headers 里面有 fun.h st_work.h
最終目標取名為 st_work,它應存放到bin里面
預備知識:
gcc 的3個參數:
1. -o 指定目標文件
gcc sources/main.c -o bin/main
2. -c 編譯的時候只生產目標文件不鏈接
gcc -c sources/main.c -o obj/main.o
3. -I 主要指定頭文件的搜索路徑
gcc -I headers -c main.c -o main.o
4. -l 指定靜態庫
gcc -lpthread ...
示例
bin/st_work : obj/main.o? obj/st_work.o? obj/fun.o??
?? gcc? obj/main.o obj/st_work.o? obj/fun.o? -o bin/st_work? (命令以Tab開頭)
obj/st_work.o : sources/st_work.c
gcc? -I? headers -c sources/st_work.c? -o? obj/st_work.o
obj/main.o : sources/main.c
gcc? -I? headers -c sources/main.c??? -o? obj/main.o
obj/fun.o? : sources/fun.c
gcc? -I? headers -c sources/fun.c ??? -o? obj/fun.o
clean:
rm -f bin/st_work obj/*.o
3)隱式規則的引入
??? 3個預定義變量介紹:
1.? $@???? 表示要生成的目標
2.? $^???? 表示全部的依賴文件
3.? $<???? 表示第一個依賴文件
bin/st_work : obj/main.o? obj/st_work.o? obj/fun.o??
gcc? $^? -o $@? (命令一定要用以Tab開頭)
obj/st_work.o : sources/st_work.c
gcc? -I? headers?? -c $< -o? $@
obj/main.o : sources/main.c
gcc? -I? headers?? -c $< -o? $@
obj/fun.o? : sources/fun.c
gcc? -I? headers?? -c $< -o? $@
clean:
rm -f bin/st_work obj/*.o
?
總結
以上是生活随笔為你收集整理的makefile常用语法讲解(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP下操作Linux消息队列完成进程间
- 下一篇: [bash]删除文件中含特定字符串的行