Ошибка компиляции в Makefile, в том числе не отображается - PullRequest
1 голос
/ 14 октября 2010

У меня есть make-файл следующим образом:

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

Я точно знаю, что заголовочные файлы есть и что они включены правильно. Пути тоже правильные. Что-то не так с make-файлом, но я не могу понять, что.

Обратите внимание, что даже если я установил CC = gcc, вывод всегда g ++. Это не опечатка, это фактически вывод, который я получаю - опять же, не знаю почему.

Помощь!

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Вы должны переопределить CXXFLAGS и CXX, а не CFLAGS и CC для файлов .cpp.

Проверьте вывод make -p и найдите правило %.o: %.cpp.

0 голосов
/ 14 октября 2010

У вас нет цели для отдельных объектных файлов ($(OBJS)), поэтому Make ищет свой список неявных правил, одним из которых является создание .o файлов из файлов .cpp с использованием компилятора C ++, который установленCXX (по умолчанию это, вероятно, g ++).

...