2011-10-31 44 views
1

使用下面作爲一個例子生成文件:Makefile文件不會擴大依賴性

CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS=-lfoobar 
SOURCES=main.cpp foo.cpp bar.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=hello

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

$(OBJECTS): $(CC) $(CFLAGS) $< -o [email protected]

$ <總是什麼也不擴展。

我試圖將其更改爲以下:

 
CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=main.cpp foo.cpp bar.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=hello

all: $(OBJECTS) # or main.o foo.o bar.cpp $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected]

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

這告訴我,有一個爲main.o

我在這裏失去了一些東西沒有什麼規則?我看到很多使用這些語法和/或變量和依賴關係的make文件。

+0

'$ <'代表'$(OBJECTS)'的先決條件列表,你沒有給出任何。只需使用像trojanfoe建議的內置規則。 –

+0

第二次嘗試的語法看起來不錯。你檢查了make -rd的輸出並確保main.cpp存在嗎? – thiton

回答

2

試試這個:

CXX=g++ 
CXXFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=main.cpp foo.cpp bar.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=hello 

all: $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) # or main.o foo.o bar.cpp 
    $(CXX) -o [email protected] $(LDFLAGS) $(OBJECTS) $(LIBS) 

規則建立的每個目標文件是內置的,無論如何,所以沒有必要去定義它。

+0

我直接複製並粘貼到一個新的生成文件,我仍然得到「沒有規則來製作目標'Main.o','hello'需要。停止。」我不明白這是怎麼回事...... – trycatch

+0

Main.o?不是main.o?看起來你的文件命名被破壞了! – trojanfoe

+0

這很奇怪。我發誓我複製並直接粘貼在..我不知道如何改變大小寫...人力資源..但我似乎現在在正確的軌道上。 – trycatch