温馨提示×

linux c++配置怎样配cmake

小樊
49
2026-09-08 03:07:20
栏目: 编程语言

下面按从零开始的思路,给你讲一下 Linux 下 C++ 项目如何用 CMake 配置,包含最常见、最实用的方式。


一、基本环境准备(Linux)

1. 安装编译器和 CMake

# Ubuntu / Debian
sudo apt update
sudo apt install -y build-essential cmake g++

# 查看版本
g++ --version
cmake --version

二、最简单的 CMake 示例

1. 项目结构(推荐)

project/
├── CMakeLists.txt
└── main.cpp

2. main.cpp

#include <iostream>

int main() {
    std::cout << "Hello CMake!" << std::endl;
    return 0;
}

3. CMakeLists.txt(最小可用)

cmake_minimum_required(VERSION 3.10)
project(hello CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(hello main.cpp)

三、编译与运行(标准流程)

mkdir build
cd build
cmake ..
make
./hello

✅ 推荐用 build 目录(out-of-source build)


四、常用 CMake 配置项(非常重要)

1. 指定 C++ 标准

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

2. 开启编译警告

add_compile_options(-Wall -Wextra)

3. Debug / Release 模式

cmake -DCMAKE_BUILD_TYPE=Debug ..
# 或
cmake -DCMAKE_BUILD_TYPE=Release ..

五、多文件 / 多目录项目

示例结构

project/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── math/
│       ├── add.cpp
│       └── add.h

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo CXX)

set(CMAKE_CXX_STANDARD 17)

file(GLOB SRC_FILES
    src/main.cpp
    src/math/*.cpp
)

add_executable(demo ${SRC_FILES})

⚠️ 实际大项目推荐显式列出源文件而不是 GLOB


六、使用静态库 / 动态库

1. 生成静态库

add_library(math STATIC src/math/add.cpp)
target_include_directories(math PUBLIC src/math)

2. 使用库

add_executable(demo src/main.cpp)
target_link_libraries(demo math)

七、引入第三方库(以 pthread 为例)

find_package(Threads REQUIRED)
target_link_libraries(demo Threads::Threads)

八、CMake + vcpkg(进阶推荐)

cmake -DCMAKE_TOOLCHAIN_FILE=/path/vcpkg/scripts/buildsystems/vcpkg.cmake ..

九、常见 CMake 模板(可直接用)

cmake_minimum_required(VERSION 3.10)
project(myapp CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)

add_executable(myapp main.cpp)

十、调试 CMake 的小技巧

cmake --trace-expand ..

如果你愿意,可以告诉我:

  • ✅ 你是初学者 / 学生 / 工程化项目
  • ✅ 是否用 Make / Ninja
  • ✅ 是否需要 多模块 / 跨平台 / 库发布

我可以直接给你一套适合你项目的 CMake 模板。

0 踩