介绍
上一篇文章介绍了 Sublime Text 中 Build system 的基本配置语法和方法,给出的案例是单文件的,对于简单的程序完全够用,但是如果是一个较大的 C++ 项目呢?我们肯定会用到诸如 Makefile, CMake, ninja, Scons 等构建工具,这篇文章就介绍如何在 Sublime Text 中结合这些构建工具来配置我们的 Build System。
我们主要用 Makefile, CMake 和 Scons 三个构建工具的案例来进行实战操作:
1. 使用 Makefile
Makefile 是构建 C++ 项目最常见的工具之一。它允许你定义规则来编译多个文件,指定依赖关系,并自动化构建过程。
设置步骤:
- 在项目目录下创建一个 Makefile:
• 定义编译器(如 g++)、源文件、输出文件以及编译选项。
• 指定源文件与目标文件之间的依赖关系。
• 包括一个 clean 目标,用于清除生成的文件。
下面是一个简单的 Makefile 示例:
Makefile
# 编译器及编译选项
CXX = g++
CXXFLAGS = -Wall -std=c++17
# 目录与文件
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin
TARGET = $(BIN_DIR)/my_project
# 获取 src 目录下的所有 .cpp 文件
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES = $(SRC_FILES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
# 主目标
$(TARGET): $(OBJ_FILES)
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -o $@ $^
# 将源文件编译为目标文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -c -o $@ $<
# 清理目标文件和二进制文件
clean:
rm -rf $(OBJ_DIR) $(BIN_DIR)
解释:
• SRC_FILES:收集 src 目录下的所有 .cpp 文件。
• OBJ_FILES:将 .cpp 文件转换为存储在 obj 目录中的 .o 文件。
• 主目标 $(TARGET):将所有的目标文件链接为最终的可执行文件。
• clean 目标:用于删除编译生成的文件。
如何与 Sublime Text 集成:
你可以创建一个 Sublime Text 构建系统,通过它运行 Makefile,创建一个如下所示的构建系统:
json
{
"shell_cmd": "make -C /path/to/project",
"working_dir": "/path/to/project",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c++, source.makefile",
"variants": [
{
"name": "Clean",
"shell_cmd": "make clean -C /path/to/project"
}
]
}
• make -C /path/to/project
命令告诉 Sublime 在项目目录下运行 make。
• Clean
允许你通过 Sublime 清理项目。
2. 使用 CMake
CMake 是一个广泛使用的跨平台构建系统生成工具。它通过 CMakeLists.txt 配置文件生成原生的构建文件(如 Makefile 或 Ninja 文件)。
设置步骤:
1. 在项目目录下创建 CMakeLists.txt 文件:
cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 17)
# 定义源文件
file(GLOB SOURCES "src/*.cpp")
# 添加可执行文件目标
add_executable(my_project ${SOURCES})
2. 构建项目:
设置好 CMakeLists.txt 后,你可以使用 CMake 生成 Makefile(或其他构建系统,如 Ninja):
bash
mkdir build
cd build
cmake ..
make
如何与 Sublime Text 集成:
创建一个 Sublime Text 构建系统,来运行 CMake 命令:
json
{
"shell_cmd": "cmake --build build",
"working_dir": "/path/to/project",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c++, source.cmake",
"variants": [
{
"name": "Configure",
"shell_cmd": "cmake -S . -B build"
},
{
"name": "Clean",
"shell_cmd": "rm -rf build"
}
]
}
• Configure 变体生成 build 目录中的构建文件。
• 主构建命令使用生成的构建系统编译项目。
• Clean 变体删除 build 目录。
3. 使用 SCons
SCons 是一个更现代的构建工具,用 Python 编写,和 Makefile 相比,它提供了更大的灵活性和易用性。SCons 自动处理依赖追踪,构建配置通过 Python 脚本(SConstruct 文件)完成。
设置步骤:
1. 安装 SCons:
bash
sudo apt install scons # Linux
brew install scons # macOS
2. 在项目根目录下创建 SConstruct 文件:
ini
env = Environment()
sources = Glob('src/*.cpp') # 获取 src 目录下的所有源文件
env.Program(target='bin/my_project', source=sources)
选择哪种方案?
• Makefile:适合传统设置和熟悉 Makefile 的开发者。它被广泛支持,适合简单到中等规模的项目。
• SCons:相比 Makefile 提供更多的灵活性和自动化,特别是基于 Python 的配置文件。
• CMake:适合跨平台项目,现代 C++ 项目中广泛使用。它与其他工具和 IDE 的集成也很好。
• Environment():创建一个构建环境。
• Glob('src/*.cpp'):收集 src 目录下的所有 .cpp 文件。
• Program:将这些文件编译并链接为 bin 目录中的可执行文件。
如何与 Sublime Text 集成:
在 Sublime 中创建一个构建系统,通过它运行 SCons:
json
{
"shell_cmd": "scons",
"working_dir": "/path/to/project",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c++, source.scons",
"variants": [
{
"name": "Clean",
"shell_cmd": "scons -c"
}
]
}
• scons 命令将运行 SCons 构建过程。
• Clean 变体使用 scons -c
来清理已编译的文件。
全文完!
如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。