一、更新系统包
在安装编译器前,建议先更新系统包以确保兼容性和安全性:
sudo yum update -y # CentOS 7及以下版本
# 或(CentOS 8及以上版本,若使用dnf)
sudo dnf update -y
二、安装基础开发工具组(可选但推荐)
基础开发工具组包含gcc、g++、make等常用工具,避免单独安装的麻烦:
sudo yum groupinstall "Development Tools" -y
三、安装GCC/G++编译器
通过yum(或dnf)安装GCC(C编译器)和G++(C++编译器),这是CentOS下最常用的C++编译器组合:
sudo yum install gcc gcc-c++ -y
四、验证编译器安装
安装完成后,通过以下命令检查编译器版本,确认安装成功:
gcc --version # 查看GCC版本
g++ --version # 查看G++版本
若输出类似gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)的版本信息,则表示安装成功。
五、(可选)安装较新版本的GCC/G++
若需要支持C++17及以上特性(如C++20),可通过**Software Collections (SCL)**安装较新版本的GCC(如GCC 10):
sudo yum install centos-release-scl -y
sudo yum install devtoolset-10-gcc devtoolset-10-gcc-c++ -y
scl enable devtoolset-10 bash
~/.bashrc文件,添加以下内容:echo "source /opt/rh/devtoolset-10/enable" >> ~/.bashrc
source ~/.bashrc
六、编译与运行C++程序
hello.cpp):#include <iostream>
int main() {
std::cout << "Hello, CentOS C++!" << std::endl;
return 0;
}
g++ -o hello hello.cpp # 基本编译(生成可执行文件hello)
./hello # 输出:Hello, CentOS C++
七、高级编译选项(可选)
根据需求调整编译选项,提升程序性能或调试便利性:
g++ -g -o hello hello.cpp
-O2为二级优化):g++ -O2 -o hello hello.cpp
libm):g++ -o hello hello.cpp -lm
八、使用Makefile自动化编译(可选)
对于大型项目,可通过Makefile简化编译流程:
Makefile文件(注意缩进为Tab键):CXX = g++ # 编译器
CXXFLAGS = -Wall -std=c++11 # 编译选项(Wall开启所有警告,std=c++11指定C++标准)
TARGET = hello # 目标文件名
SRCS = hello.cpp # 源文件
all: $(TARGET) # 默认目标
$(TARGET): $(SRCS) # 链接目标文件生成可执行文件
$(CXX) $(CXXFLAGS) -o $@ $^
clean: # 清理生成的文件
rm -f $(TARGET)
make命令编译:make
make clean
九、(可选)安装CMake(跨平台构建工具)
若项目需要跨平台支持,可安装CMake生成Makefile:
sudo yum install cmake -y
CMakeLists.txt文件(项目配置文件):cmake_minimum_required(VERSION 3.10) # CMake最低版本要求
project(HelloWorld) # 项目名称
set(CMAKE_CXX_STANDARD 11) # 指定C++标准
add_executable(hello hello.cpp) # 生成可执行文件
mkdir build && cd build # 创建build目录(推荐)
cmake .. # 生成Makefile
make # 编译项目
十、(可选)配置环境变量
若需要自定义编译器路径或库路径,可编辑~/.bashrc文件:
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc # 添加自定义路径到PATH
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc # 添加库路径
source ~/.bashrc # 使配置生效
通过以上步骤,你可以在CentOS系统上正确设置并使用C++编译器,满足从基础开发到高级项目的需求。