温馨提示×

如何写linux c++ makefile

小樊
40
2026-09-17 06:13:37
栏目: 编程语言

下面从最基础到较规范给你讲一下 Linux 下 C++ 的 Makefile 写法,适合入门到日常使用。


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

假设有文件:

main.cpp

Makefile 内容

main: main.cpp
	g++ -o main main.cpp

clean:
	rm -f main

使用

make
./main
make clean

⚠️ 注意:命令行前面必须是 Tab,不是空格


二、多文件 C++ 项目

假设结构:

main.cpp
foo.cpp
foo.h

Makefile

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

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

main.o: main.cpp foo.h
	$(CXX) $(CXXFLAGS) -c main.cpp

foo.o: foo.cpp foo.h
	$(CXX) $(CXXFLAGS) -c foo.cpp

clean:
	rm -f main *.o

三、自动推导(简化版)

Make 可以自动推导 .o 文件:

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

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

clean:
	rm -f main *.o

四、使用变量(推荐)

CXX = g++
CXXFLAGS = -Wall -std=c++17 -O2
TARGET = app
OBJS = main.o foo.o

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

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

五、自动找源文件(进阶)

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

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

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

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

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

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

CXX = g++
CXXFLAGS = -Wall -std=c++17
TARGET = app
OBJS = main.o foo.o

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

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -MMD
-include $(OBJS:.o=.d)

clean:
	rm -f $(TARGET) $(OBJS) *.d

七、常见坑提醒

✅ Tab 缩进
✅ 修改头文件要重新编译
✅ 多文件一定要链接 .o
✅ 推荐加 -Wall -Wextra


八、如果你愿意

我可以:

  • 给你写一个完整可运行示例
  • 教你 CMake(比 Makefile 更现代)
  • 针对 你的项目结构 定制 Makefile

你可以直接把你的文件结构发我。

0 踩