並感謝您的時間。我有下面的Makefile:在Makefile中創建對象
CXX = g++
CXXFLAGS = -Wall -g
SOURCES := divisor.cpp multiplier.cpp
OBJECTS := ${SOURCES:.cpp=.o}
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o [email protected]
%: %.o $(OBJECTS)
$(CXX) $(CXXFLAGS) [email protected] -o [email protected]
$(OBJECTS): %.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o [email protected]
clean:
rm -f *.o
我想這個make文件什麼是以下幾點: 如果我叫123.cpp
源文件添加到工作目錄,我想它來生成目標文件,然後鏈接編譯在$(SOURCES)
指定人士稱,這意味着:
g++ -c -Wall -g 123.cpp
g++ multipler.o divisor.o 123.o -o 123
如果multiplier.cpp
或divisor.cpp
必須生成或更新,我想作這樣做。
但我失敗了,因爲divisor.o
和multiplier.o
不是自動生成
我怎麼可能做到這一點?
編輯
只是爲了澄清,有兩種類型的工作目錄中的源代碼文件:divisor.cpp
,multipler.cpp
是一類,其他任何文件,比方說,123.cpp
是另一種類型。從某種意義上說,divisor.cpp
和multiplier.cpp
是其他源文件的必備條件。
我要自動編譯先決條件的過程和編譯其他文件
g++ -c multiplier.cpp
g++ -c divisor.cpp
g++ -c -Wall -g 123.cpp
g++ multipler.o divisor.o 123.o -o 123
首先,你有沒有規則取決於''(SOURCES)''的地方。你需要類似於你用$'(OBJECTS)''' – BitTickler 2015-04-04 17:53:19
做的事情。你沒有根據'$(OBJECTS)'指定任何最終目標? – 2015-04-04 17:56:25
目標'$(OBJECTS)'不會隱式地作爲'$(SOURCES)'的規則嗎? 取決於'$(OBJECTS)'的最終目標不是'%:%。$ $(OBJECTS)'? 謝謝 – Jorge 2015-04-04 17:59:37