2014-01-30 121 views
1

我在學習Makefiles,當我第一次搜索網頁時,我沒有得到任何關於我的問題的回覆。關於Makefiles的詳細信息

什麼-o-f-c-g-Wall-I等實際調用(如+, - ,||,& &被稱爲運營商),這樣我就可以做一個正確的搜索他們未來,他們做什麼?

我發現一個例子,其中這發生在一個Makefile如下所示:

helloworld : helloworld.c 
    gcc -o helloworld helloworld.c 

hellomake: hellomake.c hellofunc.c 
    gcc -o hellomake hellomake.c hellofunc.c -I. 

all: myprog.c 
    gcc -g -Wall -o myprog myprog.c 

(注:它們是從其他生成文件例子採取只是爲了顯示部件這裏的「-g」,「-Wall」等使用

+0

您應該首先從GNU make文檔開始。 http://www.gnu.org/software/make/manual/ –

+0

這與Makefile尤其(或C)沒有任何關係,但是使用shell腳本(makefile只是執行一堆shell命令)。這些被稱爲*參數*,並且通常不帶值的參數被稱爲*標誌*。 –

回答

2

這些標誌都無關化妝本身。讓是存在運行其他程序的程序。最常見的,但不是唯一,編譯器。

這些標誌是標誌爲你的組合(在這種情況下爲gcc)。因此,您應該查看編譯器的文檔以瞭解它們的功能。

Make只運行你給它的命令。即使您可以從shell運行編譯器,您在文檔中也找不到編譯器標誌,以便進行更多的操作。

0
"-o", "-f", "-c", "-g", "-Wall", "-I", 

是編譯器的所有選項,它與Make沒什麼關係。閱讀編譯器手冊頁。

man gcc 
1

你在混淆兩個不同的東西。 makefile所做的一切是定義一組命令,您可以使用該命令來使用程序Make來縮短命令行調用。因此,在你的例子中,「make helloworld」將在命令行中調用「helloworld.c gcc -o helloworld helloworld.c」,其中「make all」將調用「myprog.c gcc -g -Wall -o myprog myprog。 C」。另一方面,程序gcc有不同的命令行參數(比如-o),它告訴程序以某種方式運行。例如,WALL告訴它輸出所有的警告,甚至是微不足道的警告。

1

這些是命令行標誌。你所指的標誌看起來是gcc(你的C編譯器)的標誌。

許多Makefile文件都是基本上是shell命令。 「gcc -g -Wall -o myprog myprog.c」就是一個例子。你可以在shell中鍵入相同的命令(即:在終端中)來做同樣的事情。做什麼是找出執行這些命令的正確時間,並且還可以提出通用規則(例如:「這就是我總是將.c文件編譯成.o文件的方式)」。