2013-01-21 54 views
0

因爲我對bash shell腳本非常陌生,所以我無法理解我用於編譯某些程序的Makefile。關於Makefile的bash shell

您能否在下面的源代碼中解釋'$ @'和'$ <'的含義?先謝謝你。

CC=g++ 
CFLAGS=-c -Wall -I /usr/local/include/boost-1_37/ -g 
LDFLAGS=-L /usr/local/lib 
SOURCES=cluster.cpp test.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=k-means 

all: $(SOURCES) $(EXECUTABLE) 


$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o **[email protected]** 

.cpp.o: 
    $(CC) $(CFLAGS) **$<** -o **[email protected]** 

clean: 
    rm -fr *.o *~ $(EXECUTABLE) 
+1

你應該開始閱讀的手冊頁。所有內容都在這裏解釋......所以首先輸入:man make如果這樣不夠詳細,請嘗試使用信息頁。你可以猜到它:'info make' ... – arkascha

+0

需要注意的兩件事:Makefile不是用純shell腳本編寫的,默認情況下Makefile是用'sh'而不是'bash'編寫的。 – chepner

回答

2

Automatic Variables在GNU使手動:

[email protected]

規則的目標的文件名。如果目標是歸檔成員,則[email protected]是歸檔文件的名稱。在具有多個目標的 模式規則中(請參閱模式 規則簡介),[email protected]是導致規則配方 運行的任何目標的名稱。

$<

第一要義的名字。如果目標從隱式規則中獲得配方,這將是隱式規則添加的第一個先決條件(請參閱隱式規則)。