c++ - 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 $@ $<
解决方案
如评论中所述,从 hpp 更改为 cpp 解决了我的问题。事实上,我使用 .h 而不是 .hpp 作为文件扩展名。如评论中所述,使用 -d 运行 make 非常有用。