我正在尝试为我的 C++ 项目创建一个 Makefile,它具有以下结构:
root
├── include/
| └──external
| └── stb_image.h
│ └── all .h files here
├── src/
| └── main.cpp
│ └── all .cpp files here
└── Makefile
为了编译这个项目,我正在尝试使用 this answer 中提出的 Makefile,它是为 gcc 设计的,但我已经添加了 CC:=g++ 所以它应该可以工作(我认为):
SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin
EXE := $(BIN_DIR)/color
SRC := $(wildcard $(SRC_DIR)/*.cpp)
OBJ := $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
CPPFLAGS := -Iinclude -MMD -MP
CFLAGS := -g -std=c++2a -Wall
LDFLAGS := -Llib
LDLIBS := -lpthread
CC := g++
.PHONY: all clean
all: $(EXE)
$(EXE): $(OBJ) | $(BIN_DIR)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(BIN_DIR) $(OBJ_DIR):
mkdir -p $@
clean:
@$(RM) -rv $(BIN_DIR) $(OBJ_DIR)
-include $(OBJ:.o=.d)
但是在运行 make
时,我得到了一个我不明白的很长的错误。我不知道这个 error 是否来自没有 main.cpp
的 main.h
。
我需要这个 makefile,因为我想将我的项目的声明和实现分开。在此之前,我在头文件中完成了所有工作,并且可以使用以下命令编译我的项目:
g++ -g -std=c++2a -Wall -Isrc/include -o bin/color.exe src/main.cc -lpthread
知道我做错了什么吗?我仍然对 Makefile 了解不多,所以可能我在做一些奇怪的事情。