在 Linux 下做 C++ 项目的版本配置,常见方式取决于你使用的是 GCC/G++、Clang、构建工具(CMake/Makefile),还是希望管理库/工具的版本。下面按常见场景给你一个完整说明。
g++ --version
gcc --version
sudo apt update
sudo apt install gcc-11 g++-11
其他版本:
gcc-9 g++-9
gcc-12 g++-12
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
切换版本:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
g++ -std=c++17 main.cpp -o main
常见选项:
-std=c++11
-std=c++14
-std=c++17
-std=c++20
-std=c++23
✅ 推荐:新项目直接用 c++17 或 c++20
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
CXX = g++-11
CXXFLAGS = -std=c++17 -Wall -O2
main: main.cpp
$(CXX) $(CXXFLAGS) main.cpp -o main
sudo apt install clang-14
编译:
clang++-14 -std=c++20 main.cpp -o main
echo | g++ -dM -E -x c++ -std=c++20 - | grep __cplusplus
输出示例:
#define __cplusplus 202002L // C++20
update-alternatives(系统级)适合系统只有一个开发环境
Docker(强烈推荐)FROM gcc:12
Conan + CMake用于库版本管理(大型项目)
❌ 编译器太旧,不支持 C++20
✅ 升级 GCC / Clang
❌ 混用不同版本编译器
✅ 统一工具链
❌ 忘记 -std=c++xx
✅ 明确指定标准
| 项目类型 | 推荐 |
|---|---|
| 新项目 | GCC 12+ / Clang 15+ |
| C++ 标准 | C++17 / C++20 |
| 构建工具 | CMake |
| 版本管理 | Docker / update-alternatives |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的配置方案。