我正在学习编写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
有什么问题?
答案 0 :(得分:1)
该行:
$(NAME): $(OBJ_DIR)/%.o
不正确。这不是一个模式规则(因为目标不包含模式字符%
),因此它被解释为一个明确的规则,说app
取决于实际名为obj/%.o
的文件并不存在,并且不知道如何构建它(因为没有文件src/%.cpp
)。
您需要将其更改为:
$(NAME): $(OBJ_DIR)/foo.o ...
或您拥有的任何目标文件。