日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

makefile常用语法讲解(1)

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。