下面给你一个从零开始、最常用、实战可抄的 Linux 下 C++ Makefile 配置教程,从简单到规范逐步来。
假设有:
main.cpp
main: main.cpp
g++ -std=c++17 -o main main.cpp
clean:
rm -f main
使用:
make
./main
make clean
目录结构:
.
├── main.cpp
├── math.cpp
├── math.h
└── 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/math.h
src/main.cpp
src/math.cpp
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)
CXXFLAGS = -std=c++17 -Wall
LDFLAGS = -lpthread
app: main.o
g++ main.o -o app $(LDFLAGS)
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 链接库
pkg-config你可以直接把你的项目结构或代码贴出来。