cmake使用笔记

server/2025/3/10 19:28:15/

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()    # 条件不满足时执行的指令

http://www.ppmy.cn/server/174006.html

相关文章

不同开发语言之for循环的用法、区别总结

一、Objective-C &#xff08;1&#xff09;标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } &#xff08;2&#xff09;for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …

@EnableDiscoveryClient和@EnableEurekaClient springboot3.x

将一个微服务注册到Eureka Server&#xff08;或其他服务发现组件&#xff0c;例如Zookeeper、Consul等&#xff09;的步骤 1、添加客户端依赖 2、写注解 注意 现在可省略了 &#xff1a;在启动类上添加注解EnableDiscoveryClient 或EnableEurekaClient ①共同点&#xff1a…

AI×电商数据API接口:深度融合,引领未来电商行业浪潮

在数字化时代的大潮中&#xff0c;电子商务行业以其迅猛的发展势头和无限的潜力&#xff0c;成为了全球经济的重要驱动力。随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;与电商数据的深度融合&#xff0c;正逐步引领着电商行业迈向一个全新的发展阶段。其…

hrnet训练的rknn模型结合目标检测进行关键点识别的更准确前向推理

环境搭建或者模型转换之类的可以参考前面的文章&#xff0c;这里直接放代码。 首先是hrnet的推理检测函数hrnet_inference.py&#xff1a; import os import urllib import traceback import time import sys import warningsimport numpy as np import cv2# RKNN_MODEL &quo…

物联网智慧农业一体化解决方案-可继续扩展更多使用场景

在智慧农业中,从种子、施肥、灌溉、锄地、农具管理、日常照料到蔬菜档案管理,以及与客户、供应商、市场的对接,可以通过物联网(IoT)、大数据、人工智能(AI)、区块链和云计算等技术,构建一个从生产到销售的全流程数字化、智能化农业生态系统。以下是实现方案和技术路径的…

go context学习

1.Context接口2.emptyCtx3.Deadline()方法4.Done()方法5.Err方法6.Value方法&#xff08;&#xff09;7.contex应用场景8.其他context方法 1.Context接口 Context接口只有四个方法&#xff0c;以下是context源码。 type Context interface {Deadline() (deadline time.Time, …

【AI论文】GEN3C: 基于3D信息的全球一致视频生成技术,实现精确相机控制

摘要&#xff1a;我们提出了GEN3C&#xff0c;这是一种具有精确相机控制和时间3D一致性的视频生成模型。早期的视频模型已经能够生成逼真的视频&#xff0c;但它们往往利用很少的3D信息&#xff0c;从而导致诸如物体突然出现或消失等不一致现象。即便实现了相机控制&#xff0c…

【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】

摘要&#xff1a;当代码提交触发时空涟漪&#xff0c;当构建流水线穿越量子维度——欢迎来到自动化构建的终极形态。本文将揭示如何用Jenkinsfile编写量子构建乐章&#xff0c;让每次代码提交都成为跨维度交响乐的音符。 动机&#xff1a;构建系统的量子哲学 “主人啊&#xff…