01-编译运行环境搭建
编译器选择
GCC (GNU Compiler Collection)
GCC是GNU项目开发的编译器套件,是目前最广泛使用的C++编译器之一。支持多种平台,包括Linux、Windows、macOS等,完全开源免费。
主要特点:
开源免费,遵循GPL许可证
跨平台支持,可在多种操作系统上运行
功能完整,支持C++11/14/17/20标准
社区活跃,文档丰富
性能优秀,生成的代码质量高
适用场景:
Linux系统开发的首选
开源项目开发
需要跨平台兼容的项目
学习和研究用途
安装方式:
Linux系统通常默认安装,可通过包管理器更新
Windows系统需要安装MinGW或MSYS2
macOS可通过Homebrew安装:
brew install gcc
基本使用:
g++ -o program source.cpp
Clang
Clang是LLVM项目的前端编译器,以其优秀的错误信息和警告信息而闻名。被设计为GCC的替代品,在错误诊断方面表现突出。
主要特点:
错误信息更加友好和详细
编译速度快,内存占用少
模块化设计,易于扩展
与LLVM工具链集成良好
支持静态分析和代码检查
适用场景:
macOS和iOS开发
需要详细错误信息的开发
静态分析和代码检查
学习和调试用途
安装方式:
macOS系统默认使用Clang
Linux系统可通过包管理器安装
Windows系统需要安装LLVM
基本使用:
clang++ -o program source.cpp
MSVC (Microsoft Visual C++)
MSVC是微软开发的C++编译器,主要针对Windows平台优化,与Visual Studio集成度很高。
主要特点:
Windows平台性能优化
与Visual Studio深度集成
调试工具功能强大
支持Windows特有的API和库
企业级支持和文档
适用场景:
Windows平台开发
企业级应用开发
需要Windows API支持的项目
商业软件开发
安装方式:
通过Visual Studio Community(免费版)安装
包含完整的开发环境
基本使用:
cl /EHsc source.cpp
开发环境配置
Visual Studio Code
VS Code是微软开发的轻量级代码编辑器,通过插件可以变成功能强大的IDE。C++开发需要安装相应的插件。
推荐插件:
C/C++ Extension Pack:包含C++语言支持、调试器、IntelliSense等
CMake Tools:CMake项目支持
GitLens:Git集成增强
配置文件说明:
tasks.json:定义编译任务launch.json:配置调试器c_cpp_properties.json:设置编译器路径和包含目录
配置文件示例(.vscode/目录下):
tasks.json - 编译任务配置:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-std=c++17",
"-g",
"-Wall",
"-Wextra",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json - 调试器配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "C++: g++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
c_cpp_properties.json - IntelliSense配置:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
优势:
轻量级,启动速度快
插件生态丰富
跨平台支持
免费使用
适用场景:
轻量级开发
跨平台开发
插件定制需求
学习和个人项目
CLion
CLion是JetBrains开发的C++ IDE,专为C++开发设计,功能强大且专业。
主要功能:
智能代码补全和重构
强大的调试器
代码分析和检查
版本控制集成
优势:
专业的C++开发工具
智能提示和错误检查
重构功能强大
支持远程开发
缺点:
商业软件,需要付费
资源占用较大
适用场景:
专业C++开发
大型项目开发
需要强大调试功能
团队协作开发
Visual Studio
Visual Studio是微软的集成开发环境,功能最为全面,特别适合Windows平台开发。
主要功能:
完整的开发工具链
强大的调试器
性能分析工具
团队协作功能
丰富的扩展
优势:
功能最全面
Windows平台优化
企业级支持
调试功能强大
缺点:
仅支持Windows平台
资源占用大
学习曲线较陡
适用场景:
Windows平台开发
企业级应用
需要完整工具链
团队开发
编译选项
基本编译选项
基本编译命令:
# 基本编译
g++ -o program source.cpp
# 指定C++标准
g++ -std=c++17 -o program source.cpp
# 开启所有警告
g++ -Wall -Wextra -o program source.cpp
# 开启优化
g++ -O2 -o program source.cpp
# 调试信息
g++ -g -o program source.cpp
选项说明:
-o program:指定输出文件名-std=c++17:指定使用的C++标准版本-Wall:开启所有常见警告-Wextra:开启额外警告-O2:开启二级优化-g:生成调试信息
常用编译标志
标准相关:
-std=c++11:使用C++11标准-std=c++14:使用C++14标准-std=c++17:使用C++17标准-std=c++20:使用C++20标准
警告相关:
-Wall:开启所有常见警告-Wextra:开启额外警告-Werror:将警告视为错误-Wno-unused:忽略未使用变量警告
优化相关:
-O0:无优化(调试用)-O1:基本优化-O2:推荐优化级别-O3:激进优化-Os:优化代码大小
调试相关:
-g:生成调试信息-ggdb:生成GDB调试信息-DDEBUG:定义DEBUG宏
调试工具
GDB (GNU Debugger)
GDB是GNU项目开发的调试器,是Linux系统上最常用的调试工具。
基本使用:
gdb ./program
常用命令:
break main:在main函数设置断点break filename:line:在指定文件的指定行设置断点run:运行程序run arg1 arg2:带参数运行程序print variable:打印变量值info locals:显示所有局部变量step:单步执行(进入函数)next:单步执行(不进入函数)continue:继续执行quit:退出GDB
使用场景:
调试程序逻辑错误
查看变量值变化
分析程序崩溃原因
性能分析
LLDB (LLVM Debugger)
LLDB是LLVM项目开发的调试器,是macOS和iOS开发的主要调试工具。
基本使用:
lldb ./program
常用命令:
breakpoint set -n main:在main函数设置断点run:运行程序frame variable:显示当前帧的变量step:单步执行next:单步执行(不进入函数)continue:继续执行
优势:
与Clang集成良好
支持多种语言
脚本化支持
Valgrind (内存检查)
Valgrind是内存调试和性能分析工具,主要用于检测内存泄漏和内存错误。
内存泄漏检查:
valgrind --leak-check=full ./program
内存错误检查:
valgrind --tool=memcheck ./program
性能分析:
valgrind --tool=callgrind ./program
主要功能:
检测内存泄漏
检测内存访问错误
性能分析
缓存分析
构建系统
Make
Make是最经典的构建工具,通过Makefile定义编译规则和依赖关系。
Makefile基本结构:
target: dependencies
command
示例Makefile:
CC = g++
CFLAGS = -Wall -Wextra -std=c++17
TARGET = program
SOURCES = main.cpp utils.cpp
$(TARGET): $(SOURCES)
$(CC) $(CFLAGS) -o $(TARGET) $(SOURCES)
clean:
rm -f $(TARGET)
.PHONY: clean
优势:
简单易学
广泛支持
依赖管理
增量编译
CMake
CMake是跨平台的构建系统生成器,可以生成各种构建系统的文件。
CMakeLists.txt示例:
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 17)
add_executable(program main.cpp utils.cpp)
target_include_directories(program PRIVATE include)
target_link_libraries(program PRIVATE some_library)
使用步骤:
mkdir build
cd build
cmake ..
make
优势:
跨平台支持
模块化设计
依赖管理
IDE集成
包管理
vcpkg:
微软开源包管理器
支持Windows、Linux、macOS
与Visual Studio集成良好
支持CMake集成
Conan:
C++包管理器
支持多种构建系统
依赖解析
版本管理
Hunter:
CMake包管理器
轻量级
CMake原生支持
版本控制
Git基础
Git是分布式版本控制系统,是现代软件开发的标准工具。
基本操作:
git init # 初始化仓库
git add . # 添加所有文件
git commit -m "message" # 提交更改
git branch # 查看分支
git checkout branch-name # 切换分支
git merge branch-name # 合并分支
工作流程:
创建或克隆仓库
创建分支进行开发
提交更改
合并到主分支
推送到远程仓库
.gitignore配置
C++项目.gitignore:
# 编译产物
*.o
*.exe
*.out
build/
bin/
# IDE文件
.vscode/
.idea/
*.vcxproj
*.sln
# 系统文件
.DS_Store
Thumbs.db
代码格式化
Clang-format
Clang-format是代码格式化工具,可以自动格式化C++代码。
配置文件:
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 100
使用方式:
clang-format -i *.cpp
支持的风格:
Google:Google C++风格
LLVM:LLVM项目风格
Chromium:Chromium项目风格
Mozilla:Mozilla项目风格
代码检查
Clang-tidy:
静态代码分析工具
检查代码风格和潜在问题
可配置规则
IDE集成支持
Cppcheck:
开源代码质量检查工具
检测内存泄漏、缓冲区溢出等问题
支持多种检查模式
轻量级
PVS-Studio:
商业代码分析工具
功能强大
支持多种编译器
详细的错误报告
SonarQube:
代码质量管理平台
支持多种语言
持续集成支持
团队协作功能
实用编译技巧
推荐编译命令组合
# 开发阶段(快速编译,便于调试)
g++ -std=c++17 -g -Wall -Wextra -o program source.cpp
# 发布阶段(优化性能)
g++ -std=c++17 -O2 -DNDEBUG -o program source.cpp
# 严格检查(捕获所有潜在问题)
g++ -std=c++17 -Wall -Wextra -Werror -pedantic -o program source.cpp
# 性能优化(针对当前CPU)
g++ -std=c++17 -O3 -march=native -flto -o program source.cpp
参数说明:
-std=c++17:使用C++17标准-g:生成调试信息-Wall -Wextra:开启所有警告-Werror:将警告视为错误-O2/-O3:优化级别-DNDEBUG:禁用assert-march=native:针对当前CPU优化-flto:链接时优化