温馨提示×

linux c++配置怎么写makefile

小樊
32
2026-09-05 04:51:55
栏目: 编程语言

下面给你一个从简单到常用的 Linux C++ Makefile 写法示例,适合新手到中等规模项目。


一、最简单的 C++ Makefile

假设:

  • 源文件:main.cpp
  • 生成可执行文件:app
app: main.cpp
	g++ -std=c++17 -O2 -o app main.cpp

clean:
	rm -f app

使用:

make
./app
make clean

二、多个源文件(推荐写法)

目录结构:

.
├── main.cpp
├── foo.cpp
├── foo.h
└── Makefile
CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2

TARGET = app
OBJS = main.o foo.o

$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

使用:

make
make clean

三、带头文件依赖(更严谨)

如果 .h 改了也能重新编译:

CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2

TARGET = app
SRCS = main.cpp foo.cpp
OBJS = $(SRCS:.cpp=.o)

$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $^

%.o: %.cpp %.h
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

四、使用变量(工程化)

CXX = g++
CXXFLAGS = -std=c++17 -Wall -Iinclude
LDFLAGS =
LIBS = -lpthread

SRC_DIR = src
OBJ_DIR = obj
SRCS = $(wildcard $(SRC_DIR)/*.cpp)
OBJS = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS))

TARGET = app

$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) $(LIBS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	@mkdir -p $(OBJ_DIR)
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -rf $(OBJ_DIR) $(TARGET)

目录结构:

.
├── include
│   └── foo.h
├── src
│   ├── main.cpp
│   └── foo.cpp
└── Makefile

五、常见编译选项说明

选项 含义
-std=c++17 C++ 标准
-Wall 显示警告
-O2 优化
-Iinclude 头文件路径
-lpthread 链接线程库

六、调试版本(可选)

debug: CXXFLAGS += -g
debug: $(TARGET)

使用:

make debug

如果你愿意,可以告诉我:

  • 用的 g++ / clang
  • 是否用 多线程 / OpenCV / Boost
  • 项目规模(单文件 / 中型工程)

我可以直接帮你写一份可用的 Makefile

0