2011-10-31 66 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