Makefile中的编译错误,包括未显示

时间:2010-10-14 17:06:17

标签: c++ gcc makefile g++ compilation

我有一个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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您没有单个目标文件($(OBJS))的目标,因此请搜索其隐式规则列表,其中一个是使用.o文件制作.cpp个文件C ++编译器,由CXX设置(默认情况下可能是g ++)。