温馨提示×

linux c++配置如何配cmake

小樊
33
2026-09-05 04:52:56
栏目: 编程语言

下面按从零到可运行的思路,给你讲 Linux 下 C++ 如何配置 CMake,包括目录结构、CMakeLists.txt 写法、编译运行步骤,以及常见配置(多文件、第三方库、Debug/Release)。


一、最简示例(单文件)

1. 目录结构

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

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)

add_executable(hello main.cpp)

4. 编译运行

mkdir build
cd build
cmake ..
make
./hello

二、推荐目录结构(工程级)

project/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── utils.cpp
├── include/
│   └── utils.h
└── build/

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(myproject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(include)

add_executable(myproject
    src/main.cpp
    src/utils.cpp
)

三、常用基础配置

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 ..

CMakeLists 中可写:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_compile_options(-g)
endif()

四、使用静态库 / 动态库

1. 编译静态库

add_library(mylib STATIC src/utils.cpp)
target_include_directories(mylib PUBLIC include)

2. 使用库

add_executable(app src/main.cpp)
target_link_libraries(app mylib)

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

find_package(Threads REQUIRED)
target_link_libraries(app Threads::Threads)

如果是系统库:

target_link_libraries(app pthread)

六、使用 Conda / vcpkg(可选)

vcpkg 示例

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

七、常见错误排查

问题 原因
cmake: command not found 没装 cmake
No CMAKE_CXX_COMPILER could be found 没装 g++
undefined reference 没 link 库
fatal error: xxx.h include 路径没配

安装基础工具:

sudo apt update
sudo apt install build-essential cmake

八、完整最小模板(可直接抄)

cmake_minimum_required(VERSION 3.10)
project(demo CXX)

set(CMAKE_CXX_STANDARD 17)

add_executable(demo main.cpp)

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

  • ✅ 你是 新手 / 学生 / 工程化项目
  • ✅ 是否用 第三方库(如 OpenCV / Boost)
  • ✅ 是否需要 多模块 / 安装 / 测试(CTest)

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

0