cmake使用笔记

发布于:2025-03-10 ⋅ 阅读:(103) ⋅ 点赞:(0)

cmake简单示例

以下是一个分目录的简单 CMakeLists.txt 示例,展示如何组织一个多目录项目,并使用 CMake 构建。

项目目录结构

MyProject/
├── src/                       # 源文件目录
│   ├── main.cpp               # 主程序入口
│   ├── utils.cpp              # 工具模块实现
│   ├── utils.h                # 工具模块头文件
│   ├── platform_x86.cpp       # x86 平台相关实现
│   ├── platform_x86_helper.cpp # x86 平台辅助功能实现
│   ├── platform_x86_logger.cpp # x86 平台日志模块实现
│   ├── platform_arm.cpp       # ARM 平台相关实现
│   ├── platform_arm_helper.cpp # ARM 平台辅助功能实现
│   ├── platform_common.cpp    # 通用平台实现
│   └── ...                    # 更多源文件(按需求扩展)
├── include/                   # 头文件目录
│   ├── utils/                 # 工具模块头文件目录
│   │   └── utils.h            # 工具模块头文件
│   ├── platform/              # 平台相关头文件目录
│   │   ├── platform_x86.h     # x86 平台头文件
│   │   ├── platform_arm.h     # ARM 平台头文件
│   │   └── platform_common.h  # 通用平台头文件
│   └── ...                    # 更多头文件(按需求扩展)
├── build/                     # 构建目录(CMake 配置目录)
│   ├── x86_64/                # 针对 x86_64 平台的构建目录
│   │   └── CMakeLists.txt     # 针对 x86_64 的 CMake 配置文件
│   ├── arm/                   # 针对 ARM 平台的构建目录
│   │   └── CMakeLists.txt     # 针对 ARM 的 CMake 配置文件
│   └── output/                # 构建输出文件目录
│       ├── MyProject_x86_64   # x86_64 平台生成的可执行文件
│       └── MyProject_ARM      # ARM 平台生成的可执行文件
└── README.md                  # 项目说明文件


顶层 CMakeLists.txt

# 设置最低 CMake 版本
cmake_minimum_required(VERSION 3.10)

# 项目名称
project(MyProject_x86_64)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置源文件路径
set(SRC_DIR ${CMAKE_SOURCE_DIR}/../../src)
set(INCLUDE_DIR ${CMAKE_SOURCE_DIR}/../../include)

# 初始化源文件列表
set(SOURCES 
    ${SRC_DIR}/main.cpp
    ${SRC_DIR}/utils.cpp
)

# 根据架构或平台添加额外的源文件(逐行添加)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
    message(STATUS "Adding x86-specific source files.")
    list(APPEND SOURCES
        ${SRC_DIR}/platform_x86.cpp
        ${SRC_DIR}/platform_x86_helper.cpp
        ${SRC_DIR}/platform_x86_logger.cpp
    )
else()
    message(STATUS "Adding common platform source files.")
    list(APPEND SOURCES
        ${SRC_DIR}/platform_common.cpp
    )
endif()

# 打印最终的源文件列表(调试用)
message(STATUS "Source files: ${SOURCES}")

# 指定编译输出路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)

# 添加可执行文件
add_executable(MyProject_x86_64 ${SOURCES})

# 指定头文件目录
target_include_directories(MyProject_x86_64 PRIVATE ${INCLUDE_DIR})

cmake里的条件判断

        在 CMakeLists.txt 文件中,可以使用 if 语句进行条件判断。CMake 提供了强大的条件判断功能,可以根据变量值、文件存在与否、平台类型等条件执行特定的逻辑。以下是常用的条件判断用法及示例:

基本语法

if (<condition>)

    # 条件满足时执行的指令

else()

    # 条件不满足时执行的指令

网站公告

今日签到

点亮在社区的每一天
去签到