没有规则在Makefile中制作目标

时间:2013-05-08 13:19:17

标签: unix makefile gnu-make

我正在学习编写makefile。我做了一个简单的尝试和测试,但每次我运行make,我得到:

make: *** No rule to make target `/%.cpp', needed by `obj'.  Stop.
我用Google搜索了一下。我很确定我正确输入了所有内容,并且我的文件夹设置方式应该如此。这是makefile:

CC = g++
LD = g++

NAME = app
OBJ_DIR = obj 
SRC_DIR = src 

CC_FLAGS = -std=c++0x

all: $(NAME)

$(NAME): $(OBJ_DIR)/%.o
    $(LD) $(OBJ_DIR)/%.o -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    $(CC) $< -o $@ $(CC_FLAGS)

clean:
    rm $(NAME) $(OBJ_DIR) -rf 

有什么问题?

1 个答案:

答案 0 :(得分:1)

该行:

$(NAME): $(OBJ_DIR)/%.o

不正确。这不是一个模式规则(因为目标不包含模式字符%),因此它被解释为一个明确的规则,说app取决于实际名为obj/%.o的文件并不存在,并且不知道如何构建它(因为没有文件src/%.cpp)。

您需要将其更改为:

$(NAME): $(OBJ_DIR)/foo.o ...

或您拥有的任何目标文件。