并感谢您的时间。我有下面的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