CMake入门教程【核心篇】添加依赖(add_dependencies)

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

    • 1. 基本用法
    • 2. 添加目标依赖
    • 3. 添加多个目标依赖
    • 4. 添加自定义命令的依赖
    • 5. 添加外部项目的依赖
    • 6. 使用别名作为依赖
    • 7.使用技巧
      • 7.1 管理复杂依赖
      • 7.2 与`target_link_libraries`结合使用
      • 7.3 避免过度依赖

CMake的add_dependencies命令是项目构建过程中管理依赖关系的关键工具。它确保在构建特定目标之前,其依赖的其他目标已经被构建。

add_dependencies 使用
基本用法
添加目标依赖
添加多个目标依赖
添加自定义命令依赖
添加外部项目依赖
使用别名作为依赖
使用技巧
add_dependencies(target deps...)
add_executable + add_dependencies
多依赖目标的处理
自定义命令和目标
子目录项目依赖
别名目标依赖
管理复杂依赖
与target_link_libraries结合
避免过度依赖

1. 基本用法

add_dependencies(target dependencies...)
  • target:需要添加依赖的目标。
  • dependencies:一个或多个target所依赖的目标。

2. 添加目标依赖

add_executable(my_executable main.cpp)
add_dependencies(my_executable dependency_target)
  • 这确保在构建my_executable之前,dependency_target已被构建。

3. 添加多个目标依赖

add_executable(my_executable main.cpp)
add_dependencies(my_executable dependency_target1 dependency_target2)
  • 该命令指定my_executable在构建前需先构建dependency_target1dependency_target2

4. 添加自定义命令的依赖

add_custom_command(
    OUTPUT output_file
    COMMAND command_to_generate_output
    DEPENDS dependency_file
)

add_custom_target(my_target DEPENDS output_file)
  • 这里定义了一个自定义命令生成output_file,然后创建一个依赖于这个文件的自定义目标my_target

5. 添加外部项目的依赖

add_subdirectory(external_project)
add_dependencies(my_target external_project)
  • 这条命令确保在构建my_target之前,位于子目录中的external_project已经被构建。

6. 使用别名作为依赖

add_library(my_library1 STATIC my_library1.cpp)
add_library(my_library2 ALIAS my_library1)
add_dependencies(my_target my_library2)
  • 在这个示例中,my_library2my_library1的别名。将my_library2作为依赖添加到my_target可以确保相关库被正确构建。

7.使用技巧

7.1 管理复杂依赖

对于有复杂依赖关系的大型项目,add_dependencies可用于精确控制构建顺序,避免构建失败。

7.2 与target_link_libraries结合使用

在一些情况下,除了使用add_dependencies外,还需要使用target_link_libraries确保链接依赖也被正确处理。

7.3 避免过度依赖

虽然add_dependencies在管理依赖方面非常有用,但过度使用可能导致构建过程变得复杂和缓慢。合理组织项目结构和使用现代CMake特性(如target-based命令)可以减少不必要的依赖。

通过有效使用add_dependencies,您可以确保CMake项目中的依赖关系得到妥善处理,从而使构建过程更加稳定和高效。

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

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

相关文章

Docker网络模型

Docker容器是虚拟化技术,其使用虚拟化网络技术实现Docker容器主机中运行的容器实例之间的网络互连功能,本文主要描述Docker的网络模型。 Docker架构 如上所示,Docker容器化的架构分为三个部分,其中Docker Host是虚拟化主机系统&a…

JAVA学习专栏

JAVA专栏 Java核心技术 Java核心技术 Java练手算法 Java练手算法 Java数据结构和算法 Java数据结构和算法 Java设计模式 Java设计模式 Java并发编程 Java并发编程 MySQL数据库 MySQL数据库 Java项目管理Maven Java项目管理Maven 项目管理工具gradle 项目管理工具gradle…

leetcode2397. 被列覆盖的最多行数

目录 题目 思路 解题方法 题目 https://leetcode.cn/problems/maximum-rows-covered-by-columns/description/ 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。 …

助力工业生产“智造”,基于YOLOv8全系列模型【n/s/m/l/x】开发构建纺织生产场景下布匹瑕疵检测识别系统

纯粹的工业制造没有办法有长久的发展过程,转制造为全流程全场景的生产智造才是未来最具竞争力的生产场景,在前面的开发实践中我们已经涉足工业生产场景下进行了很多实地的项目开发,如:PCB电路板缺陷检测、焊接缺陷检测、螺母螺钉缺…

深入浅出Python日志打印

0.引言 在编程过程中,日志记录是一项非常重要的任务,无论是用于调试代码、记录系统运行状态,还是跟踪可能出现的问题,日志都能发挥重要作用。然而,许多开发者习惯使用简单的print语句来记录信息,这种方法虽…

SVN服务端的下载、安装

地址 : Apache Subversion Binary Packages 下载 点击 VisualSVN 安装 都是点击 next 点击next ,即可安装成功

让设备更聪明 |启英泰伦离线自然说,开启智能语音交互新体验!

语音交互按部署方式可以分为两种:离线语音交互和在线语音交互。 在线语音交互是将数据储存在云端,其具备足够大的存储空间和算力,可以实现海量的语音数据处理。 离线语音交互是以语音芯片为载体,语音数据的采集、计算、决策均在…

二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)

之前也是把堆部分的知识点梳理完毕(即二叉树链式顺序的实现):堆的应用:堆排序和TOP-K问题 那么讲完了二叉树链式结构的实现。今天就进入二叉树链式结构的实现: 文章目录 1.准备工作2.二叉树的遍历2.1前序遍历2.2中序遍…

用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了

近年来,随着AIGC的爆火,图片生成技术得到飞速发展,当前AI生成的图片已达到真假难辨的高保真度。不过,当合成图片中出现文字内容时,仍能够使AI露出马脚,因为当前主流方法尚无法在图片中生成准确可读的字符。…

YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f-EMSC和C2f-EMSCP模块

一、Detect_DyHead检测头和C2f-EMSC,C2f-EMSCP模块 详细介绍和代码在往期的博客里: Detect_DyHead: (YOLOv8改进检测头Detect为Detect_Dyhead-CSDN博客) C2f-EMSC和C2f-EMSCP: (YOLOv8改进…

Unity中Shader雾效在场景中的调节技巧

文章目录 前言一、修改棋盘格Shader的Cull可以在属性面板控制1、在属性面板定义CullMode2、在SubShader中,使用CullMode3、这样就可以在不同剔除情况下使用棋盘格场景了 二、调节天际线颜色和雾融为一体1、在摄像机设置不渲染天空盒,渲染单一颜色2、采样…

我开发了一个聚合网盘资源搜索引擎-支持阿里云盘与夸克网盘资源

还在为找不到电子书资源而发愁?还在愁没有高清影视剧观看? 来试试我开发的云盘资源搜索引擎吧! 公众号回复关键词: 搜索 ! 就可以获取到网站网址。 这里还有资源分享微信群,不定期分享资源。 关于界面 怎么使用这个引擎&#x…

实验笔记之——下载数据到服务器

开发过程中经常需要把数据传到服务器上,太麻烦了,为此本博文记录采用百度云来传输数据 百度云 使用bypy包。 安装:pip install bypy 配置bypy连接百度网盘: 终端输入bypy info将命令行提示的链接复制到浏览器,并复制…

Github 2024-01-04 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3C项目2TypeScript项目2Java项目2Jupyter Notebook项目1Go项目1 系统设计指南 创建周期&#xff…

Flutter用GridView实现网格功能(1、item设置一个外边框,2、item背景点击变色,松开恢复原色)

GridView接收如下可选参数属性: scrollDirection:滚动方法padding:内边距resolve:组件反向排序crossAxisSpacing:水平子Widget之间间距mainAxisSpacing:垂直子Widget之间间距crossAxisCount:一…

C#/.NET/.NET Core优秀项目和框架2023年12月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍、功能特点以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先…

Wireshark本地回环网络抓包

背景 因为发往本机的数据包是通过回环地址的,即:数据包不会通过真实的网络接口发送,因此我们需要通过设置路由规则来让本来发到虚拟网络接口的数据包发送到真实网络接口即可。 场景描述:在网络程序开发的过程中,有时…

SQL中 Group by Grouping Sets 分组的用法

文章目录 1. 用法2. 语法3. 实际应用3.1 求总和与小计3.2 按多个维度分组3.3 标记小计和总计 1. 用法 将Grouping Sets 运算符添加到Group by 子句中,使用Grouping Set 可以在一个查询中指定数据的多个分组,其结果与针对指定的组执行union all 运算等效…

k8s中的容器探针

pod的容器健康检查---探针 probe:k8s对容器执行的定期检查,诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe:探测容器是否正常运行。如果发现探测失败,会杀掉容器。容器会根据重启策略…

ensp vlan连接(详细)

1.将需要的设备放置好 2.将设备连接起来 3.启动所有设备 4.备注好每台PC机的信息 5.配置好每台PC机 6.配置交换机1 进入配置视图,关闭信息提示 重命名设备 批量创建VLAN 开始配置接口 更改接口类型为ACCESS 将接口划分到对应的VLANN 配置下一个接口,步…