在 Ubuntu 下用 C++ 编译,常见方式有 g++ / clang++ 命令行 和 构建系统(Makefile / CMake)。下面按使用场景给你整理一份实用指南。
g++ main.cpp -o main
g++ -std=c++17 main.cpp -o main
常用标准:
-std=c++11-std=c++14-std=c++17-std=c++20g++ -std=c++17 -g -O0 -Wall -Wextra main.cpp -o main
含义:
-g:生成调试信息(配合 gdb)-O0:不优化(调试更直观)-Wall -Wextra:开启常见警告g++ -std=c++17 -O2 -DNDEBUG main.cpp -o main
或更高性能:
g++ -std=c++17 -O3 -march=native -DNDEBUG main.cpp -o main
g++ main.cpp foo.cpp bar.cpp -o app
或分步编译:
g++ -c main.cpp
g++ -c foo.cpp
g++ main.o foo.o -o app
g++ main.cpp -lpthread
g++ main.cpp -lm
示例(OpenCV):
g++ main.cpp `pkg-config --cflags --libs opencv4`
示例 Makefile:
CXX = g++
CXXFLAGS = -std=c++17 -Wall -Wextra -g
TARGET = app
SRCS = main.cpp foo.cpp
$(TARGET): $(SRCS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $(TARGET)
clean:
rm -f $(TARGET)
使用:
make
./app
CMakeLists.txt 示例:
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-Wall -Wextra -g)
add_executable(app main.cpp foo.cpp)
构建:
mkdir build && cd build
cmake ..
make
| 选项 | 作用 |
|---|---|
-I |
指定头文件路径 |
-L |
指定库路径 |
-l |
链接库 |
-pthread |
支持多线程 |
-static |
静态链接 |
-fsanitize=address |
内存错误检测 |
示例:
g++ main.cpp -I./include -L./lib -lmylib -pthread
如果你有 具体场景(比如:多线程 / OpenCV / 嵌入式 / 内核模块 / 性能优化),可以告诉我,我给你更精确的编译选项。