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.
我是从头开始编写makefile的新手,所以这可能是一个愚蠢的问题,但任何帮助都表示赞赏!
答案 0 :(得分:1)
问题在于:
$(BIN_DIR)/%.o: src/%.c
@echo Building "$@"
@g++ -c "@<" -o"$@"
我认为更像是这样:
$(BIN_DIR)%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
答案 1 :(得分:1)
正如Sean Bright已经指出的那样,改变了
@g++ -c "@<" -o"$@"
到
@g++ -c "$<" -o"$@"
也让Makefile对我起作用(ming32-make:GNU Make 3.81)
由于您将Makefile与源文件放在同一级别(在src
目录中),因此您的规则失败了。