0

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

make: *** No rule to make target `/%.cpp', needed by `obj'.  Stop.

我用谷歌搜索。我很确定我输入了正确的所有内容,并且我的文件夹已按应有的方式设置。这是生成文件:

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 

问题是什么?

4

1 回答 1

1

该行:

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

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

您需要将其更改为:

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

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

于 2013-05-08T13:50:32.867 回答