温馨提示×

linux c++配置怎样写makefile

小樊
41
2026-09-02 02:37:48
栏目: 编程语言

下面给你一个实用、由浅入深的 Linux C++ Makefile 写法说明,从最简单到稍复杂的工程配置,适合日常开发。


一、最简单的 C++ Makefile(单文件)

假设只有 main.cpp

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

main: main.cpp
	$(CXX) $(CXXFLAGS) main.cpp -o main

clean:
	rm -f main

使用:

make
./main
make clean

二、多源文件基础写法

假设:

main.cpp
foo.cpp
foo.h
CXX = g++
CXXFLAGS = -Wall -std=c++17

TARGET = app
OBJS = main.o foo.o

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

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

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

三、带头文件路径和第三方库(常见)

例如使用 pthreadopencv 或自定义 include/ 目录:

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

LDFLAGS = -lpthread -lopencv_core -lopencv_highgui

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

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

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

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

四、自动扫描源文件(推荐)

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

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

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

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

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

五、Debug / Release 区分(常用)

CXX = g++
TARGET = app

ifeq ($(mode), debug)
CXXFLAGS = -g -Wall -std=c++17
else
CXXFLAGS = -O2 -Wall -std=c++17
endif

OBJS = main.o foo.o

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

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

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

使用:

make mode=debug
make mode=release

六、常见变量说明(速查)

变量 含义
CXX C++ 编译器
CXXFLAGS 编译参数
LDFLAGS 链接参数
$@ 目标文件
$< 第一个依赖
$^ 所有依赖

七、建议

  • 小项目:手写 Makefile ✅
  • 中大型项目:用 CMake 更省心
  • 学习阶段:Makefile 很有价值 ✅

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

  • 你的目录结构
  • 是否用第三方库
  • 是否要 CMake / Makefile 对比

我可以直接帮你写一个可用的完整 Makefile

0