将头文件添加到依赖项后,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.
的新模式规则
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.