温馨提示×

linux c++配置怎么配Makefile

小樊
43
2026-09-26 07:44:20
栏目: 编程语言

下面给你一个从零开始、最常用、实战可抄的 Linux 下 C++ Makefile 配置教程,从简单到规范逐步来。


一、最基础的 Makefile(单文件)

假设有:

main.cpp

最简 Makefile

main: main.cpp
	g++ -std=c++17 -o main main.cpp

clean:
	rm -f main

使用:

make
./main
make clean

二、多文件 C++ 项目(推荐)

目录结构:

.
├── main.cpp
├── math.cpp
├── math.h
└── Makefile

Makefile

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

TARGET = app
OBJS = main.o math.o

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

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

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

编译:

make
./app
make clean

三、带头文件目录(include)

结构:

include/math.h
src/main.cpp
src/math.cpp

Makefile

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

TARGET = app
SRCS = src/main.cpp src/math.cpp
OBJS = $(SRCS:.cpp=.o)

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

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

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

四、自动找源文件(更通用)

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

TARGET = app
SRCS = $(wildcard src/*.cpp)
OBJS = $(SRCS:.cpp=.o)

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

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

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

五、链接第三方库(如 pthread)

CXXFLAGS = -std=c++17 -Wall
LDFLAGS = -lpthread

app: main.o
	g++ main.o -o app $(LDFLAGS)

六、Debug / Release 配置

CXX = g++
TARGET = app

ifeq ($(debug),1)
CXXFLAGS = -g -O0 -Wall
else
CXXFLAGS = -O2 -Wall
endif

OBJS = main.o math.o

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

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

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

使用:

make            # release
make debug=1   # debug

七、常见坑提醒

✅ 必须用 Tab 缩进(不是空格)
✅ -I 指定头文件目录
✅ -L 指定库目录
✅ -lxxx 链接库


八、如果你愿意,我还能帮你

  • ✅ 写一个 CMake vs Makefile 对比
  • ✅ 给你一个 大型项目 Makefile 模板
  • ✅ 帮你把现有代码直接生成 Makefile
  • ✅ 教你用 pkg-config

你可以直接把你的项目结构或代码贴出来。

0 踩