在 Linux 下用 C++ 配置编译选项,常见方式取决于你用的是 命令行(gcc/g++)、Makefile 还是 CMake。下面按常见场景说明。
g++ main.cpp -o main
g++ -std=c++17 -Wall -Wextra -O2 main.cpp -o main
| 选项 | 说明 |
|---|---|
-std=c++11/14/17/20 |
指定 C++ 标准 |
-Wall |
开启常用警告 |
-Wextra |
更多警告 |
-Werror |
把警告当错误 |
-O0 / -O2 / -O3 |
优化级别 |
-g |
生成调试信息(gdb) |
-I/path |
指定头文件路径 |
-L/path |
指定库路径 |
-lxxx |
链接库(如 -lpthread) |
g++ -std=c++17 -Wall -c foo.cpp
g++ -std=c++17 -Wall -c main.cpp
g++ foo.o main.o -o app
CXX = g++
CXXFLAGS = -std=c++17 -Wall -Wextra -O2
LDFLAGS = -lpthread
TARGET = app
SRCS = main.cpp foo.cpp
OBJS = $(SRCS:.cpp=.o)
$(TARGET): $(OBJS)
$(CXX) $(OBJS) -o $(TARGET) $(LDFLAGS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
编译:
make
make clean
cmake_minimum_required(VERSION 3.10)
project(MyApp)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(app main.cpp foo.cpp)
add_compile_options(-Wall -Wextra -O2)
或针对某个 target:
target_compile_options(app PRIVATE -Wall -Wextra -O2)
target_link_libraries(app pthread)
mkdir build
cd build
cmake ..
make
| 目的 | 推荐选项 |
|---|---|
| 调试 | -g -O0 |
| 发布 | -O2 或 -O3 |
| 严格检查 | -Wall -Wextra -Werror |
| C++ 标准 | -std=c++17 |
g++ --version
g++ -std=c++17 -dM -E -x c++ /dev/null | grep __cplusplus
❌ 忘记链接库:
undefined reference to `pthread_create`
✅ 解决:
g++ main.cpp -lpthread
如果你愿意,可以告诉我:
我可以给你一个完全贴合你项目的编译配置方案。