将头文件添加到依赖项后,makefile 不适用于 main.cpp

after Adding header file to dependency, makefile didn't work for main.cpp

CPPFLAGS = -std=c++11

SRC_DIR    := src
HEADER_DIR := include
BIN_DIR    := bin
OBJ_DIR     := $(BIN_DIR)/obj

EXECUTABLE := $(BIN_DIR)/main

OBJECTS = $(addprefix $(OBJ_DIR)/,main.o admin.o number.o SHA256.o signatures.o user.o)


all: $(EXECUTABLE)

directories:
    mkdir $(OBJ_DIR)

$(EXECUTABLE): $(OBJECTS)
    g++ -o $@ $(CPPFLAGS) $(OBJECTS) 
    
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADER_DIR)/%.h
    g++ $(CPPFLAGS) -c $< -o $@ -I $(HEADER_DIR)


clean: 
    del $(OBJ_DIR)\*.o $(EXECUTABLE)
    CPPFLAGS = -std=c++11

以上是我的生成文件。它在 main.cpp 更改后不会更新,而它仅在我从依赖项中删除头文件时适用于 main.cpp 。 即更改此行 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADER_DIR)/%.h$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp 为什么会这样?

这条规则:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADER_DIR)/%.h

告诉make如何构建一个object文件当且仅当它可以找到一个适当命名的.cpp文件 适当命名的 .h 文件。如果找不到这些文件中的任何一个,并且 make 找不到构建它们的规则,则此规则不匹配,make 将继续寻找其他规则来构建 object 文件。

如果没有找到其他规则,make 会告诉您没有构建 object 文件的规则。

如果 main.cpp 出现此错误,则表示没有相应的 main.h 文件。

您需要创建一个 main.h 文件,或者更改此模式规则以不将 header 作为先决条件(您添加其他文件的 header 作为先决条件直接),或者创建一个不需要 header.

的新模式规则