温馨提示×

ubuntu c++CMake如何配置

小樊
48
2026-10-05 08:19:09
栏目: 编程语言

下面给你一份从零开始在 Ubuntu 上配置 C++ + CMake 的实用指南,包含安装、项目结构、CMakeLists.txt 示例和常见配置。


一、安装必要工具

1. 安装编译器和 CMake

sudo apt update
sudo apt install -y build-essential cmake gdb

检查版本:

gcc --version
g++ --version
cmake --version

二、最小 C++ + CMake 项目示例

1. 项目结构

my_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(MyProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(my_app main.cpp)

三、编译和运行

cd my_project
mkdir build
cd build
cmake ..
make
./my_app

四、推荐的标准 CMake 配置(Ubuntu)

cmake_minimum_required(VERSION 3.16)
project(MyProject CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

add_executable(my_app main.cpp)

五、多文件 / 多目录项目

my_project/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── math.cpp
├── include/
│   └── math.h

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(MyProject CXX)

set(CMAKE_CXX_STANDARD 17)

include_directories(include)

add_executable(my_app
    src/main.cpp
    src/math.cpp
)

六、使用静态库 / 动态库

生成库

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

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

##七、Debug / Release 配置

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

CMakeLists.txt 中可加:

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

八、使用第三方库(以 fmt 为例)

sudo apt install libfmt-dev
find_package(fmt REQUIRED)
target_link_libraries(my_app fmt::fmt)

九、常见问题

1. cmake 版本太低

sudo apt install cmake
# 或手动安装新版

2. 找不到头文件

  • 确认 target_include_directories
  • 不要直接用 include_directories(不推荐)

3. 推荐现代写法

target_include_directories(my_app PRIVATE include)

如果你有具体需求(比如 ROS / OpenCV / CUDA / 多模块项目 / CLion / VSCode),可以告诉我,我可以给你更针对性的 CMake 配置。

0 踩