簡體   English   中英

對 Makefile (C/unix) 感到困惑

[英]Confused about Makefile (C/unix)

http://puu.sh/7OiDL.png

好的,那么 export: StackImplementation.o 是做什么的? 比如它出口到哪里? 另外, gcc -l 在做什么? 我用谷歌搜索它,它說“gcc -l 鏈接到一個庫文件”。 什么是鏈接到庫文件? 最后,“用您選擇的打印命令替換下面的 lpr”是什么意思? lpr是做什么的? 什么是干凈的:rm -f *.o?

export是虛假目標的名稱。 你可以說

% make export

make 將構建它的依賴項。 沒有指定如何將依賴項轉換為名為 export 的文件的操作,並且在沒有隱式規則的情況下,構建依賴項后 make 將停止。

-I to gcc 正在添加一個路徑來搜索包含文件。 您將它與-l選項混淆,該選項指定要鏈接的庫的名稱(可以滿足未解析符號的預構建目標文件集合)。

lpr命令將文件發送到默認行式打印機。 同樣, print是一個虛假的目標; 正在做

% make print

將源文件發送到打印機。

大多數 makefile 都包含一個clean規則來刪除生成的文件。 當依賴項沒有正確指定並且對源文件的更改不會導致構建目標時,這是必要的。 rm命令是 remove 的縮寫; 它刪除文件。 如果你這樣做

% make clean

它將強制刪除所有以.o結尾的文件。

大多數這些目標都是假的,如果碰巧有名稱比它們的依賴項(如果有)更新的文件,它們將無法正常工作。 大多數.PHONY允許您通過將它們列為超級虛假.PHONY目標的依賴項來指定哪些目標是虛假的。 然后,Make 將忽略文件系統,並始終應用規則。

export: 

這是一個名為“export”的目標,並且是 makefile 中的第一個目標,因此如果在命令行上未指定目標,它將被默認調用。 我不清楚為什么它被稱為“出口”,但這是有人為它選擇的名稱

export: StackImplementation.o

這表示導出依賴於 StackImplementation.o,因此在調用導出時它將調用目標 StackImplementation.o

StackImplementation.o: StackImplementation.c ...

StackImplementaiton.o 取決於源文件 StackImplementation.c 和列出的包含文件。 這將運行具有標志 -I../Include 的 gcc,它告訴 gcc 在相鄰目錄“Include”中包含 .h 文件

# substitute...

這是一條注釋,表明如果您想將打印命令 lpr 更改為其他打印​​命令

clean:

這是一個常見的目標,它將使用 -f 選項刪除目標文件,即使未設置寫權限也強制刪除

1) lpr 提交文件進行打印。 在命令行上命名的文件被發送到指定的打印機(如果沒有指定目的地,則發送到默認目的地)。 如果命令行上沒有列出任何文件,lpr 從標准輸入讀取打印文件。

有關“lpr”的更多信息,請使用 linux 用戶手冊。


2)gcc -l 將外部庫鏈接到您的程序(如果有任何依賴)。

例子::

gcc hello.c -o hello -lpthread -ldrm -ldrm_omap 

在制作文件中::

clean:
       rm -rf *.o

這里 clean 是 make 的規則,當我們調用 make clean 時,它會調用 rm -rf *.o 來刪除所有目標文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM