首页 > 解决方案 > Makefile:没有规则来制作目标。但从我所看到的它应该被覆盖

问题描述

你好新人在这里生成文件。

我无法理解为什么我的 makefile 无法工作。我收到以下错误:

make: *** No rule to make target '../obj/StageObject.o', needed by 'test_distances'.  Stop.

我的 $(OBJ_FILES) 包含以下字符串:

../obj/StageObject.o ../obj/Coordinate.o ../obj/Robot.o

这很好。

我不明白的是,据我所知,我确实有一条涵盖“../obj/StageObject.o”的规则。即规则“../obj/%.o”。我什至尝试将其替换为“%.o”,但出现了相同的响应。

什么是我看不见的?

OBJ_DIR = ../obj
SRC_DIR = ../src

SRC_FILES := $(wildcard ../src/*.cpp)
OBJ_FILES := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))

test_distances: test_distances.o $(OBJ_FILES)
    g++ -o test_distances $^

../obj/%.o : $(SRC_DIR)/%.hpp
    g++ -c -o $(OBJ_DIR)/$@ $(SRC_DIR)/$<

test_%.o : test_%.hpp
    g++ -c -o $@ $<

标签: c++makefile

解决方案


如评论中所述,从 hpp 更改为 cpp 解决了我的问题。事实上,我使用 .h 而不是 .hpp 作为文件扩展名。如评论中所述,使用 -d 运行 make 非常有用。


推荐阅读