在 CentOS 下用 C++ 编译时,常见的“设置编译选项”主要有几种场景:g++/gcc 命令行选项、Makefile 中的选项、CMake 中的选项。下面按常用方式说明。
CentOS 默认一般使用 g++(来自 GCC)。
g++ main.cpp -o main
| 选项 | 作用 |
|---|---|
-std=c++11 / c++14 / c++17 |
指定 C++ 标准 |
-O0 / -O2 / -O3 |
优化级别 |
-g |
生成调试信息(gdb 用) |
-Wall -Wextra |
开启常用警告 |
-I/path |
指定头文件路径 |
-L/path |
指定库路径 |
-lxxx |
链接库(如 -lpthread) |
-DDEBUG |
定义宏 |
示例:
g++ -std=c++17 -O2 -g -Wall -I./include main.cpp -o main -lpthread
示例 Makefile:
CXX = g++
CXXFLAGS = -std=c++17 -O2 -Wall -g
INCLUDES = -I./include
LIBS = -lpthread
target: main.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) main.cpp -o main $(LIBS)
使用:
make
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-O2 -Wall -g)
add_executable(main main.cpp)
target_link_libraries(main pthread)
mkdir build && cd build
cmake ..
make
cmake -DCMAKE_BUILD_TYPE=Release ..
或:
cmake -DCMAKE_CXX_FLAGS="-O3 -march=native" ..
g++ --version
若没有:
sudo yum install gcc-c++
sudo yum install centos-release-scl
sudo yum install devtoolset-11
scl enable devtoolset-11 bash
CentOS 下通常要:
-lpthread
或 CMake:
find_package(Threads REQUIRED)
target_link_libraries(main Threads::Threads)
g++ -std=c++17 -O2 -Wall -Wextra -g \
-I./include -L./lib \
main.cpp utils.cpp -o app -lpthread
如果你有具体需求(比如:静态链接、交叉编译、指定 CPU 架构、使用 OpenMP、CMake 多目录结构等),可以告诉我,我可以给你更针对性的配置。