2010-10-14 66 views
1

我有一个makefile如下:编译错误,包括没有显示出来

CC = gcc 
CFLAGS = -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" $(INCLUDES) 
ifdef DEBUG 
CFLAGS += -g3 
endif 

INCLUDES = \ 
-I../config.include \ 
-I../log.include \ 
-I../services.include 

SRC_DIR = src 
BIN_DIR = bin 
BINARY = report 

SRCS = $(shell ls $(SRC_DIR)/*.cpp) 
OBJS = $(SRCS:%.cpp=%.o) 

all: $(OBJS) 
    @mkdir -p $(BIN_DIR) 
    $(CC) $(OBJS) -o $(BIN_DIR)/$(BINARY) 

clean: 
    rm -rf $(BIN_DIR) $(OBJS) 

然而,当我运行make,我得到的错误:

g++  -c -o src/report.o src/report.cpp 
src/report.cpp:40:20: error: log.h: No such file or directory 
src/report.cpp:41:28: error: services.h: No such file or directory 
src/report.cpp:41:28: error: config.h: No such file or directory 

我知道的一个事实头文件在那里,并且它们包含正确。路径也是正确的。 makefile有问题,但我无法弄清楚什么。

请注意,即使我设置CC = gcc,输出总是g ++。这不是一个错字,它实际上是我得到的输出 - 再次,不知道为什么。

帮助!

回答

2

对于.cpp文件,您必须重新定义CXXFLAGSCXX而不是CFLAGSCC

检查输出make -p并搜索%.o: %.cpp规则。

+0

谢谢!我对Makefiles没有太多经验,但这应该是一个暗示。 – Sagar 2010-10-14 17:34:05

0

你没有目标的目标文件($(OBJS)),所以请搜索其隐含的规则列表,其中之一是从使用C++编译器,它是由CXX设置.cpp文件使.o文件(由默认可能是g ++)。