在 Ubuntu 下使用 C++ 编译,常见方式有两种:命令行 g++ 和 构建系统(CMake / Makefile)。下面按常见场景说明编译选项如何设置。
g++ main.cpp -o main
g++ -std=c++17 -Wall -Wextra -O2 main.cpp -o main
常用选项说明:
-std=c++11 / c++14 / c++17 / c++20:指定 C++ 标准-Wall -Wextra:开启常见警告-O2:优化级别(调试用 -O0)-g:生成调试信息(配合 gdb)g++ main.cpp func.cpp -o main
或分步编译:
g++ -c main.cpp
g++ -c func.cpp
g++ main.o func.o -o main
g++ main.cpp -lpthread -o main
示例 Makefile:
CXX = g++
CXXFLAGS = -std=c++17 -Wall -Wextra -O2
TARGET = main
SRCS = main.cpp func.cpp
$(TARGET): $(SRCS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $(TARGET)
clean:
rm -f $(TARGET)
使用:
make
make clean
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(main main.cpp func.cpp)
add_compile_options(-Wall -Wextra -O2)
或针对目标:
target_compile_options(main PRIVATE -Wall -Wextra)
mkdir build
cd build
cmake ..
make
调试:
g++ -std=c++17 -g -O0 -Wall main.cpp -o main
发布:
g++ -std=c++17 -O2 -Wall main.cpp -o main
g++ --version
g++ -std=c++17 -dM -E -x c++ /dev/null | grep cplusplus
如果你有具体需求(如:多线程、静态链接、交叉编译、使用 Boost/OpenCV 等),可以告诉我,我可以给你针对性的编译选项示例。