Makefile 和 CMake 是两种常用的构建工具,用于管理和编译 C/C++ 项目。以下是它们的基本用法和示例。
-
使用 Makefile
Makefile 是一个文本文件,定义了如何编译和链接项目。make 工具会根据 Makefile 中的规则自动构建项目。
-
安装
make
- 在 Linux 上,通常已经预装了
make。如果没有,可以通过以下命令安装:
sudo apt update
sudo apt install make
-
编写 Makefile
假设你有一个简单的 C++ 项目,包含以下文件:
-
main.cpp(主程序) -
utils.cpp(工具函数) -
utils.h(工具函数头文件)
示例 Makefile
# 编译器
CXX = g++
# 编译选项
CXXFLAGS = -Wall -std=c++11
# 目标可执行文件
TARGET = my_program
# 源文件
SRCS = main.cpp utils.cpp
# 生成的目标文件
OBJS = $(SRCS:.cpp=.o)
# 默认目标
all: $(TARGET)
# 生成可执行文件
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)
# 生成目标文件
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# 清理生成的文件
clean:
rm -f $(OBJS) $(TARGET)
-
使用 Makefile
- 编译项目 :
make
这会生成可执行文件 my_program。
- 运行程序 :
./my_program
- 清理生成的文件 :
make clean
这会删除生成的目标文件和可执行文件。
-
使用 CMake(CMakeLists.txt)
CMake 是一个跨平台的构建工具,可以生成适用于不同编译器和操作系统的构建文件(如 Makefile 或 Visual Studio 项目文件)。
-
安装 CMake
- 在 Linux 上:
sudo apt update
sudo apt install cmake
- 在 macOS 上:
brew install cmake
-
在 Windows 上,可以从 CMake 官网 下载安装程序。
-
编写 CMakeLists.txt
假设你有一个简单的 C++ 项目,包含以下文件:
-
main.cpp(主程序) -
utils.cpp(工具函数) -
utils.h(工具函数头文件)
示例 CMakeLists.txt
# 最低 CMake 版本要求
cmake_minimum_required(VERSION 3.10)
# 项目名称
project(MyProject)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加可执行文件
add_executable(MyProject main.cpp utils.cpp)
-
使用 CMake 构建项目
-
创建构建目录 :
mkdir build
cd build
- 生成构建文件 :
cmake ..
这会生成适用于当前平台的构建文件(如 Makefile)。
- 编译项目 :
make
这会生成可执行文件 MyProject。
- 运行程序 :
./MyProject
- 清理生成的文件 :
make clean
或者直接删除 build 目录:
cd ..
rm -rf build
-
Makefile 和 CMake 的区别
| 特性 | Makefile | CMake |
|-------------------|----------------------------------------|----------------------------------------------|
| 跨平台支持 | 需要手动编写不同平台的规则 | 自动生成适用于不同平台的构建文件 |
| 易用性 | 适合小型项目,语法较复杂 | 适合中大型项目,语法更简洁 |
| 依赖管理 | 需要手动管理依赖 | 自动管理依赖 |
| 扩展性 | 有限 | 强大,支持模块化和插件 |
4. 总结
-
Makefile :适合小型项目,直接控制编译过程。
-
CMake :适合中大型项目,跨平台支持更好,语法更简洁。
根据项目需求选择合适的工具!