帮助Makefile:没有规则来制作目标

时间:2010-10-06 18:09:48

标签: c++ makefile gnu-make

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的新手,所以这可能是一个愚蠢的问题,但任何帮助都表示赞赏!

2 个答案:

答案 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目录中),因此您的规则失败了。