【CMake】3.单项目单模块添加第三方依赖包示例工程

CMake 示例工程代码

https://github.com/LABELNET/cmake-simple

单项目单模块 - 添加第三方依赖示例工程

https://github.com/LABELNET/cmake-simple/tree/main/simple-deps

1. 单模块工程 + 第三方依赖

CMake 单模块工程,这是一个示例工程

  • simple-deps , 项目名称
  • cmake , 第三方依赖
  • demo , 主模块 main

2. 目录结构

$ .SIMPLE-DEPS      
│   CMakeLists.txt                 # 项目根 CMakeLists.txt , 用于项目配置
│   README.md                      # 说明文档,无关
├───.vscode                        # 头文件路径配置
│       c_cpp_properties.json
├───cmake                          # 第三方依赖文件夹
├───build                          # CMake 编译输出
└───demo                           # 主模块
    │   CMakeLists.txt             # 主模块 CMakeLists.txt                    
    ├───include                    # 源码:头文件文件夹
    │       demo_utils.h
    └───src                        # 源码: 代码文件夹
            demo_utils.cc
            main.cc

3. 项目/CMakeLists.txt

以项目编译配置为主

cmake_minimum_required(VERSION 3.18)

# 项目名称
set(PROJECT_NAME simple-deps)
project(${PROJECT_NAME} VERSION 0.1.0)

# 1.编译类型
if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

# 2. C++ 标准库
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# 3. 第三方库
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake;${CMAKE_MODULE_PATH}")

# 4.工程名称
project(${PROJECT_NAME} LANGUAGES CXX)

# 5.主模块 main
add_subdirectory(demo)

# 6.打包器
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

4. 主模块/CMakeLists.txt

第三方依赖示例,使用 OpenCV , 显示一张图片

以功能代码实现为主

cmake_minimum_required(VERSION 3.18)

# 模块名称
set(MODULE_NAME demo)

# 1.可执行文件
add_executable(${MODULE_NAME})

# 2.源码,注意: 源文件代码格式,这里用的为 .cc 文件
file(GLOB_RECURSE srcs CONFIGURE_DEPENDS src/*.cc include/*.h)

# 3.目标
target_sources(${MODULE_NAME} PUBLIC ${srcs})

# 4.头文件
target_include_directories(${MODULE_NAME} PUBLIC include)

# 5. 第三方依赖 OpenCV
find_package(OpenCV CONFIG REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# 6. 第三方依赖 Spdlog
find_package(spdlog CONFIG REQUIRED)

# 7. Link 依赖
target_link_libraries(
    ${MODULE_NAME} 
    ${OpenCV_LIBRARIES}
    spdlog::spdlog
)

5. 运行

点击 Build ,可进行编译
点击 Run , 先进行编译,再运行。若已经编译,将直接运行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人调用OCR

一、自己训练模型 二、调用现成API 此处介绍百度智能云API,因为有免费次数。(原来一些网址在百度不是默认显示网址的,而是自己的网站名字) 首页找到OCR 每个人每月能用1K次。(有详细的API文档说明,不过跟…

docker 部署来自Hugging Face下机器翻译模型

机器翻译模型(Hugging Face官网) 模型翻译api服务代码 # 离线翻译服务代码 # -*-coding:utf-8-*-import os import json import logging from logging.handlers import RotatingFileHandler from datetime import datetime from flask import Flask, request,jsonify from geve…

FreeRTOS——软件定时器知识总结及其实战

1.软件定时器概念 是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。 2 软件定时器使用特点 1)如果要使能软件定时器,需将c…

【XR806开发板使用】开发环境搭建、Hello工程以及开发事项

XR806开发板试用 很有幸能获得本次技术社区和全志组织的XR806开发板试用活动。之前开发的嵌入式应用都是在Windows平台上进行的,对于Linux下的开发并不熟悉,在社区里看到群友使用官方提供的docker环境进行开发,顺着群友的指导,找…

ROS学习笔记(11)进一步深入了解ROS第五步

0.前提 我在学习宾夕的ROS公开课的时候发现,外国的对计算机的教育和国内的是完全不一样的,当你接触了外国的课程后回头看自己学的会发现好像自己啥也没学。我这里可以放出来给大家看一下。 1.Python and C 2.Python PDB Tutorial:Python Deb…

产业认可 | 开源网安荣获 CCIA“2023 年度优秀会员单位”

​1月4日,“2023年度中国网络安全产业联盟成员大会暨理事会”在京召开,开源网安作为成员单位受邀出席本次大会。 在会上,联盟发布了关于2023年度表彰先进的决定,作为中国软件安全领域的创领者,开源网安在技术、实践和创…

计算机毕业设计-----ssm情缘图书馆管理系统

功能介绍 基于SSM的情缘图书馆管理系统。SSM框架,适合java初学者。 主要功能包括: 图书编目管理:图书编目、编目维护; 图书信息管理:图书录入、图书信息; 图书借阅管理:借阅图书、借阅信息…

OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了,必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

新耀莱要约收购接近尾声,此前共有4713万股接纳要约

新耀莱要约收购事件近期即将结束,引起了资本市场的广泛关注和讨论。作为曾经在汽车经销领域风光无限的企业,新耀莱如今面临衰退的结局,确实令人唏嘘。从财务数据的恶化到核心业务的萎靡,新耀莱的经营表现已无法令人乐观。而随着公司要约收购临近尾声,不少投资者都在担忧,新耀莱…

HTML5+CSS3小实例:文字涂抹动画

实例:文字涂抹动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><me…

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结&#xff1a; ①通过Service层与Dao层实现转账的练习&#xff1b; ②重点&#xff1a;由于每次使用连接就手动创建连接&#xff0c;用完后就销毁&#xff0c;这样会导致资源浪费&#xff0c;因此引入连接池&#xff0c;练习连接池的使用&#xff1b; …

太阳能组件紫外预处理试验箱

太阳能组件紫外预处理试验箱波长范围&#xff1a;280-400nm用于太阳能光伏组件的温湿度及相类似紫外预处理环境的试验&#xff0c;主要用于太阳能组件材料评估诸如聚合物和保护层等材料抗紫外辐照能力&#xff0c;在预处理试验过程中能够快速、真实地再现阳光、雨、露等环境及对…

Etcd安装以及操作

Etcd介绍 etcd 是一个高度一致的分布式键值 (key-value) 存储&#xff0c;它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举&#xff0c;即使在 领导者节点中也可以容忍机器故障。 etcd 是用 Go 语言编写的&a…

Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!

响应与Rest风格 1.11.1.1 环境准备步骤1:设置返回页面步骤2:启动程序测试 1.1.2 返回文本数据步骤1:设置返回文本内容步骤2:启动程序测试 1.1.3 响应JSON数据响应POJO对象响应POJO集合对象 知识点1&#xff1a;ResponseBody 2&#xff0c;Rest风格2.1 REST简介2.2 RESTful入门案…

Linux上搭建YApi

YApi是http接口管理和测试的重要工具&#xff0c;其作用相当于原来用的postman&#xff0c;但是比postman有更多的功能&#xff0c;本篇文章主要介绍如何在linux环境中快速的安装&#xff08;利用yum命令安装&#xff09;和部署YApi 一、nodejs 安装 1.1 下载nodejs包 yum i…

iPaaS与ETL:了解它们的主要区别

平均每个组织使用 130 多个应用程序&#xff0c;这一数字同比增长 30%。 随着公司试图充分利用其不断增长的应用程序生态系统&#xff0c;他们已经转向可以集成它们和/或其数据的工具。两个常用选项包括集成平台即服务 &#xff08;iPaaS&#xff09; 和提取、传输、加载 &…

pytorch08:学习率调整策略

目录 一、为什么要调整学习率&#xff1f;1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率&#xff…

宝宝洗衣机哪个牌子质量好?好用的小型洗衣机推荐

当婴儿的到来&#xff0c;确实会给家庭带来许多变化&#xff0c;就好比如对于宝宝相关衣物的清洗需求。对于新生儿及婴幼儿的衣服&#xff0c;一般都要给予特殊的照顾与清洗&#xff0c;以保证不含细菌及过敏原。尤其是刚刚出生的婴儿&#xff0c;这时候宝宝们的皮肤很是幼嫩。…

JAVA基础学习笔记-day12-泛型

JAVA基础学习笔记-day12-泛型 1. 泛型概述1.1 泛型的引入 2. 使用泛型举例2.1 集合中使用泛型2.2 相关使用说明 3. 自定义泛型结构3.1 泛型的基础说明3.2 自定义泛型类或泛型接口3.2.1 说明3.2.2 注意 3.3 自定义泛型方法3.3.1 说明 4. 泛型在继承上的体现5. 通配符的使用5.1 通…

MySQL面试题汇总

常规&#xff1a; 1、数据库三大范式 1NF : 表中字段的数据不可再拆分。(原子性)2NF : 在满足第一范式的情况下&#xff0c;遵循唯一性&#xff0c;消除部分依赖。即&#xff0c;表中任意一个主键或任意一组联合主键&#xff0c;可以确定除该主键外的所有的非主键值。(一个表…