在 Linux 下用 C++ 开发时,“选编译器”主要涉及 用哪个编译器(gcc / clang)、如何指定版本、以及 在构建系统(Make/CMake/命令行)里如何配置。下面按常见场景说明。
g++:C++ 编译器g++ --version
clang++:C++ 编译器clang++ --version
icpx)arm-linux-gnueabihf-g++ 等)g++ main.cpp -o app
clang++ main.cpp -o app
g++ -std=c++17 main.cpp -o app
clang++ -std=c++20 main.cpp -o app
ls /usr/bin/g++*
ls /usr/bin/clang++*
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 120
sudo update-alternatives --config g++
同理对 gcc / clang++ 配置。
CXX = g++
CXXFLAGS = -std=c++17 -Wall
app: main.cpp
$(CXX) $(CXXFLAGS) main.cpp -o app
或:
CXX = clang++
cmake -DCMAKE_CXX_COMPILER=clang++ ..
或指定绝对路径:
cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++-12 ..
set(CMAKE_CXX_COMPILER clang++)
⚠️ 注意:编译器要在第一次 cmake 前决定,否则要清缓存:
rm -rf build && mkdir build && cd build
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
| 场景 | 建议 |
|---|---|
| 服务器 / 生产环境 | g++ |
| 更好的错误提示 | clang++ |
| 静态分析 / 工具链 | clang++ |
| 嵌入式 | 交叉 g++ |
| 新标准支持 | clang++ 通常更快 |
g++ 和 gcc 混用
g++,不是 gccCMake 缓存导致编译器不生效
build 目录重新配置系统默认太旧
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置。