温馨提示×

linux c++怎样写makefile

小樊
38
2026-09-02 02:51:48
栏目: 编程语言

下面从最基础稍规范一点给你讲 Linux 下 C++ 的 Makefile 写法,适合新手。


一、最简单示例(单个文件)

假设有:

main.cpp

最简 Makefile

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

clean:
	rm -f main

使用

make        # 编译
./main      # 运行
make clean  # 清理

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


二、多文件示例(推荐新手这样写)

目录结构:

main.cpp
foo.cpp
foo.h

Makefile

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

target = app

$(target): main.o foo.o
	$(CXX) -o $(target) 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 *.o $(target)

编译

make
./app
make clean

三、自动推导(更简单)

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

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

clean:
	rm -f app *.o

Make 会自动把 .cpp 编译成 .o


四、带变量的标准写法(常用)

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

SRC = main.cpp foo.cpp
OBJ = $(SRC:.cpp=.o)
TARGET = app

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

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

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

五、常见错误提醒

❌ 用空格代替 Tab
✅ 命令行必须用 Tab

❌ 忘了写头文件依赖
✅ 改了 .h,重新 make


六、进阶(可选)

  • 使用 pkg-config(如 OpenCV、GTK)
  • 使用 CMake(比 Makefile 更现代)
  • 多目录项目

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

  • 你是 新手还是有一定基础
  • 项目是 单文件 / 多文件 / 大型项目
  • 是否在用 第三方库(如 OpenCV、Boost)

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

0