[英]Confused about Makefile (C/unix)
好的,那么 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.