2014-03-29 42 views
-3

http://puu.sh/7OiDL.png困惑的Makefile(C/UNIX)

好了,所以什麼出口:StackImplementation.o呢?像它出口到哪裏? 另外,gcc -l在做什麼?我GOOGLE了它,它說「gcc -l鏈接庫文件」。什麼是鏈接到庫文件? 最後,「用下面的lpr代替你選擇的打印命令」是什麼意思? lpr做什麼?什麼是乾淨的:rm -f * .o?

+1

你的PNG文件刪除是不是一個非常有用的呈現makefile的方式。編輯你的答案將其包含爲文本,然後人們可以剪切n粘貼,引用它並回答你的具體問題 – Vorsprung

回答

1

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

% make export 

而make會建立它的依賴關係。沒有指定如何將依賴關係轉換爲名爲export的文件的操作,並且在沒有隱式規則的情況下,make將在構建依賴關係後停止。

gcc的-I正在添加一個搜索包含文件的路徑。您將它與-l選項混淆,該選項指定要鏈接的庫的名稱(預構建的可從中獲得未解析符號的對象文件集合)。

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

% make print 

將源文件發送到打印機。

大多數makefile包含一個clean規則來刪除生成的文件。當沒有正確指定依賴關係時,有必要對源文件進行更改,而不會導致目標生成。 rm命令是刪除的簡稱;它刪除文件。如果你這樣做

% make clean 

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

這些目標大部分都是假的,如果碰巧存在這些名稱比其依賴項更新的文件,將無法正常工作。大多數使得你可以通過列出它們作爲超級假冒目標的依賴關係來指定哪些目標是假冒的。然後Make將忽略文件系統,並始終應用這些規則。

0

1)lpr提交打印文件。在命令行上命名的文件將被髮送到指定的打印機 (或者如果未指定目的地,則爲默認目的地)。如果com- 命令行上沒有列出文件,lpr會從標準輸入中讀取打印文件。

有關「lpr」使用用戶手冊的Linux的更多信息。


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

例如::

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

make文件::

clean: 
     rm -rf *.o 

這裏的清潔是化妝的規則,當我們調用使清潔,然後它會調用室射頻* .o刪除所有目標文件。

1
export: 

這是一個名爲「出口」的目標,是在生成文件,因此將默認如果在命令行上指定的目標被調用的第一個目標。我不明白爲什麼它被稱爲「出口」但是這名有人選擇了它

export: StackImplementation.o 

此說,出口取決於StackImplementation.o所以它會調用目標StackImplementation.o出口時被調用

StackImplementation.o: StackImplementation.c ... 

StackImplementaiton.o取決於源文件StackImplementation.c和列出的包含文件。它具有標誌-I ../包括它告訴GCC包括在相鄰目錄.h文件這將運行gcc「包括」

# substitute... 

這表明更改打印命令LPR一些其它打印評論命令,如果你想

clean: 

這是一種常見的目標,這將刪除目標文件-f選項,迫使即使寫權限未設置