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.hqwc.cn/news/319562.html

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

相关文章

2024年【河北省安全员B证】新版试题及河北省安全员B证模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 河北省安全员B证新版试题参考答案及河北省安全员B证考试试题解析是安全生产模拟考试一点通题库老师及河北省安全员B证操作证已考过的学员汇总,相对有效帮助河北省安全员B证模拟考试题库学员顺利通过考试。…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹,鼠标右击【setu…

Oracle regexp_replace 手机号脱敏

select 18012345678,regexp_replace(18012345678,(.){4},****,4,1) from dual;

LLM Agent之数据库应用设计

上一章我们主要讲搜索引擎和LLM的应用设计,这一章我们来唠唠大模型和DB数据库之间的交互方案。有很多数据平台已经接入,可以先去玩玩再来看下面的实现方案,推荐 sql translate:简单,文本到SQL,SQL到文本双向…

Mysql8.0新特性

一,redo log重构 (涉及写入缓存的点:redo log 8.0之前通过两个锁及队列的方式保证数据的一致性,8.0之后,去掉锁,采用了区间的方式,区间内的所有日志是原子性的,都是串行化执行&…

Java集合框架和泛型

1.Java集合框架 架构图: Java的集合框架是一组用于存储和操作数据的类和接口。它提供了各种数据结构,如列表、集合、映射等,以及用于操作这些数据结构的算法和工具。Java集合框架位于Java.util包中,并且是Java编程中常用的核心组…

百度Apollo:自动驾驶的领航者

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接&#xf…

excel 插件:Rainbow Analyst Crack

一个插件中包含四种 EXCEL 审核工具检测并修复隐藏的电子表格错误 不要满足于更少,四种领先的电子表格审计工具合二为一 Rainbow Analyst(因其对颜色编码的独特强大使用而得名)结合了世界级电子表格审核功能的多个领域: Excel™ …

Apollo感知模块 :传感器| 目标监测| 障碍物识别 | 模型管理

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接&#xf…

el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题

问题描述 一个可展开的表格(列设置了type“expand”),并且展开后的内容高度可以变化,会导致后面所有行的固定列错位,图如下,展示行中是一个树形表格,默认不展示子级,点击树形表格的…

迅为RK3568开发板-实时系统烧写-烧写固件(下)

3.烧写系统 拷贝完镜像,开始烧写镜像,点击 RKdevTool.exe,如下图所示: 烧写工具打开如下图所示: 选择“升级固件”选项卡,然后点击升级固件选项卡下的“固件”选项,在弹出的固件窗口中选择 放…

小程序一次性订阅消息(消息通知):java服务端实现

文章目录 引言一、消息订阅1.1 小程序订阅消息功能介绍1.2 消息分类1.2.1 新版一次性订阅消息Beta1.2.2 一次性订阅消息(用户通过弹窗订阅)1.2.3 长期订阅消息(用户通过弹窗订阅)1.2.4 设备订阅消息 二、获取模板ID1.登录[微信公众…