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_fileCOMMAND command_to_generate_outputDEPENDS 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项目中的依赖关系得到妥善处理,从而使构建过程更加稳定和高效。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图: MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM,是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…

【LMM 008】Instruction Tuning with GPT-4

论文标题:Instruction Tuning with GPT-4 论文作者:Baolin Peng, Chunyuan Li, Pengcheng He, Michel Galley, Jianfeng Gao 作者单位:Microsoft Research 论文原文:https://arxiv.org/abs/2304.03277 论文出处:– 论文…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion(简称SD)在开源领域绝对是不二之选,他的插件方式可以让此软件具有更多的功能,开发者社群为此提供了大量免费高质量的外接预训练模型(fine-tune)和插件,并持续维…

旋转图像(LeetCode 48)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在「原地」旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示…

网络安全—模拟ARP欺骗

文章目录 网络拓扑安装使用编辑数据包客户机攻击机验证 仅做实验用途,禁止做违法犯罪的事情,后果自负。当然现在的计算机多无法被欺骗了,开了防火墙ARP欺骗根本无效。 网络拓扑 均使用Windows Server 2003系统 相关配置可以点击观看这篇文章…

Android开发中“真正”的仓库模式

原文地址:https://proandroiddev.com/the-real-repository-pattern-in-android-efba8662b754原文发表日期:2019.9.5作者:Denis Brandi翻译:tommwq翻译日期:2024.1.3 Figure 1: 仓库模式 多年来我见过很多仓库模式的实…

部署清华ChatGLM-6B(Linux版)

引言 前段时间,清华公布了中英双语对话模型 ChatGLM-6B,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。因为条件特殊,实验室网络不通,那么如何进行离线部署呢? 「部署环境」:CUDA Version 11.0,…

【JavaEE进阶】 关于Spring mvc 响应

文章目录 🎍序言🌳 返回静态⻚⾯🌲RestController 与 Controller 的关联和区别🌴返回数据 ResponseBody🎋返回HTML代码⽚段🍃返回JSON🍀设置状态码🎄设置Header🚩设置Con…

代码随想录算法训练营第五十七天|647. 回文子串、516.最长回文子序列、动态规划总结篇

代码随想录 (programmercarl.com) 647. 回文子串 1.dp数组及下标含义 我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话&…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

🦉 AI新闻 🚀 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要:斯坦福和Meta的学者发表论文为Gemini正名,他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1)下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/ 2)查询API文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…

m3u8网络视频文件下载方法

在windows下,使用命令行cmd的命令下载m3u8视频文件并保存为mp4文件。 1.下载ffmpeg,访问FFmpeg官方网站:https://www.ffmpeg.org/进行下载 ffmpeg下载,安装,操作说明 https://blog.csdn.net/m0_53157282/article/det…

PACC:数据中心网络的主动 CNP 生成方案

PACC:数据中心网络的主动 CNP 生成方案 文章目录 PACC:数据中心网络的主动 CNP 生成方案PACC算法CNP数据结构PACC参数仿真结果参考文献 PACC算法 CNP数据结构 PACC参数 仿真结果 PACC Hadoop Load0.2 的情况: PACC Hadoop Load0.4 的情况&a…

基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码

概述 农业与民生和经济发展息息相关,对农业发展科学化的关注既是民生需求, 也是经济稳步发展的迫切需求。病虫害是影响农作物生长的重要因素,对农作物的产量和品质都能造成无法估计的损害。 - 针对目前广大农业产区农业植保人员稀缺、病虫害…

Docker与虚拟机的比对

在Windows操作系统上的对比: 但是官方还是建议我们尽量不要将Docker直接安装到Windows操作系统上。

2024第一篇: 架构师成神之路总结,你值得拥有

大家好,我是冰河~~ 很多小伙伴问我进大厂到底需要怎样的技术能力,经过几天的思考和总结,终于梳理出一份相对比较完整的技能清单,小伙伴们可以对照清单提前准备相关的技能,在平时的工作中注意积累和总结。 只要在平时…

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…

(湖科大教书匠)计算机网络微课堂(下)

第四章、网络层 网络层概述 网络层主要任务是实习网络互连,进而实现数据包在各网络之间的传输 因特网使用TCP/IP协议栈 由于TCP/IP协议栈的网络层使用网际协议IP,是整个协议栈的核心协议,因此TCP/IP协议栈的网络层常称为网际层 网络层提供…

Java 流程控制语句

程序设计中规定的三种流程结构,即: 顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转 分支结构 根据条件,选择性地执行某段代码 有 if…else 和 switch-case 两种分支语句 循环结构 根据循环条件,重复性的执…

Yapi安装配置(CentOs)

环境要求 nodejs(7.6) mongodb(2.6) git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…