Помощь с Makefile: нет правил для создания цели - PullRequest
1 голос
/ 06 октября 2010
CC = g++
CFLAGS = -Wall

RM = /bin/rm -rf
BIN_DIR = 

ifeq "$(DEBUG)" "1"
BIN_DIR = Debug
else
BIN_DIR = Release
endif

OBJS = \
$(BIN_DIR)/Unit.o

$(BIN_DIR)/%.o: src/%.c
    @echo Building "$@"
    @g++ -c "$<" -o"$@"

all: $(OBJS)
clean:
    $(RM) $(BIN_DIR)

.PHONY: all clean

Однако, когда я пытаюсь построить свой проект, это выдает мне ошибку:

make: *** No rule to make target 'Release/Unit.o', needed by 'all'. Stop.

Я новичок в написании make-файлов с нуля, так что это может быть глупым вопросом, но любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Как уже указывал Шон Брайт, изменение

@g++ -c "@<" -o"$@"

на

@g++ -c "$<" -o"$@"

также делает Makefile для меня (ming32-make: GNU Make 3.81)

Поскольку у вас был Makefile на том же уровне, что и исходный файл (внутри каталога src), ваше правило не выполнялось.

1 голос
/ 06 октября 2010

Проблема здесь:

$(BIN_DIR)/%.o: src/%.c
    @echo Building "$@"
    @g++ -c "@<" -o"$@"

Я думаю, что это больше похоже на:

$(BIN_DIR)%.o: %.c
    $(CC) -o $@ -c $< $(CFLAGS)
...