【CMake】add_dependencies 命令

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

原文链接:https://blog.youkuaiyun.com/new9232/article/details/125831009
参考链接:https://blog.youkuaiyun.com/new9232/article/details/121374943

简介
add_dependencies(<target> [<target-dependency>]...)

官方文档对此的解释为 :在顶级目标之间添加依赖关系。

使顶层 target 依赖于其他顶层目标,以确保它们在 target 之前构建。顶级目标是由 add_executable(),add_library() 或 add_custom_target() 命令之一创建的。

实例

目录结构

----demo
--------CMakeLists.txt
--------lib
------------CMakeLists.txt
------------mymath.cpp
------------mymath.h
--------src
------------CMakeLists.txt
------------main.cpp
最外层 cmake
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.14)

# 指定工程名
project(demo)

# 添加子目录
add_subdirectory(${PROJECT_SOURCE_DIR}/src)
add_subdirectory(${PROJECT_SOURCE_DIR}/lib)

lib 目录下 cmake
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.14)

// 指定库文件生成目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

// 生成库文件
add_library(myMath SHARED ${PROJECT_SOURCE_DIR}/lib/mymath.cpp)
src 目录下 cmake
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.14)

# 指定头文件位置
include_directories(${PROJECT_SOURCE_DIR}/lib)

# 设置可执行文件生成目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# 生成可执行文件
add_executable(test ${PROJECT_SOURCE_DIR}/src/main.cpp)

# 链接动态库
target_link_libraries(test ${PROJECT_BINARY_DIR}/bin/libmyMath.so)
测试

直接编译代码

[root@dev build]# make
Scanning dependencies of target res
[ 25%] Building CXX object src/CMakeFiles/res.dir/main.cpp.o
make[2]: *** No rule to make target 'bin/libmyMath.so', needed by 'bin/res'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:91: src/CMakeFiles/res.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
[root@dev build]# 

可以看到会有报错,

因为在最外层 CMakeLists.txt 中,添加子目录时,先添加 src 子目录,

即,在生成可执行文件res时,链接库文件的时候,库文件还没有生成。

当然可以调整添加子目录的顺序,先生成库文件,再生成可执行文件。

但在实际开发中,链接库文件时,库文件还未生成的场景还是比较多的。

这个时候就可以使用 add_dependencies 命令。修改 src 目录下的 cmake

# 指定cmake最低版本
cmake_minimum_required(VERSION 3.14)

# 指定头文件位置
include_directories(${PROJECT_SOURCE_DIR}/lib)

# 设置可执行文件生成目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# 生成可执行文件
add_executable(test ${PROJECT_SOURCE_DIR}/src/main.cpp)

# 指定依赖
add_dependencies(test myMath)

# 链接动态库
target_link_libraries(test ${PROJECT_BINARY_DIR}/bin/libmyMath.so)

添加 add_dependencies(res myMath),意思就是告诉编译器:

我知道生成 test 可执行程序要链接 myMath 库文件,

但是现在还没有这个库文件,你先生成 test,我随后就把库文件 myMath 给你生成出来。

CMake基础教程(31)add_dependencies添加target之间的依赖 add_dependencies(<target> [<target-dependency>]...) 比较简单,给某个target添加依赖,target来自add_executable(), add_library(), or add_custom_target()。 阅读详情

相关推荐

CMake:生成和添加依赖库的CMakeLists

在使用CMake构建项目时,我们可以通过编写CMakeLists.txt文件来生成和添加依赖库。总结起来,使用CMake生成和添加依赖库可以帮助我们更好地管理项目的构建过程和依赖关系。通过编写简单的CMakeLists.txt文件,我们可以轻松地生成和添加各种类型的库,并将其用于目标可执行文件或其他库中。首先,我们需要创建一个CMakeLists.txt文件,并在其中指定项目的名称和最低要求的CMake版本。除了生成和添加依赖库,CMake还提供了许多其他有用的命令和选项,可以根据项目的需要进行配置。

KgCrystal的博客 1295

CMAKE之add_dependencies使用

CMAKE之add_dependencies使用问题引入问题解决总结 问题引入 在项目中通常会遇见这样的情况:(例如一个项目中有:main,libhello.a, libworld.a),当项目过小的时候,编译顺序是*.a,然后是main,但是当一个项目的文件过于庞大,就会导致编译的顺序不会按照主CMAKE的add_subdirectory引入的先后顺序,为了解决这一问题,就需要使用add_dependencies进行依赖指定。 问题解决 该样例的工程结构如下: ├── CMakeLists.txt//

BeanGuohui的博客 2万+

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 188

cmake之add_dependencies

cmake之add_dependencies。

new9232的博客 6358

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3565

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6435

【cmake 基础小知识】如何在CMake项目中使用add_dependencies命令管理目标依赖关系

在现代软件开发过程中,构建系统扮演着至关重要的角色。CMake,作为一个跨平台的构建系统,允许开发者定义和管理复杂的项目构建过程。本章节旨在介绍CMake的基础概念,重点讲解如何在CMake中建立目标之间的依赖关系,确保构建顺序的正确性。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2839

PS射击游戏射线检测优化:原理、工程与全链路高性能实现

射线池:减少GC,提升批量检测效率。分层检测:先粗后细,远距离射击高效判定。批量检测:并行处理,适合大量射线场景。空间结构:进一步加速大场景检测。下面继续深入射线检测优化,补充更多实用细节和进阶技巧,包括空间分区加速、射线检测多线程/异步化、射线合并与分帧、射线池通用模板、常见性能陷阱与调优建议等。对于极端性能需求,可自定义轻量级物理系统,仅检测关键对象(如玩家、子弹),跳过复杂物理引擎。结合AABB、OBB、球体等简单碰撞体,射线-包围体检测极快。空间分区+分层检测是大场景射线优化核心。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 433

cmake命令之add_dependencies

一、介绍 在顶级目标之间添加一个依赖项。 格式 add_dependencies(<target> [<target-dependency>]...) 使顶级<目标>依赖于其他顶级目标,以确保它们在<目标>之前构建。顶级目标是由add_executable()、add_library()或add_custom_target()命令创建的 二、实例 假设我们需要生成一个可执行文件,该文件生成需要链接a.so b.so c.so d.so四个动态库

sinat_31608641的博客 3197

踩过20+工控视觉项目的坑后,我用C# + 海康相机 + YOLOv11实现了零依赖产线缺陷检测

触发式检测:只有光电传感器检测到零件到位,才触发相机拍照和算法检测,不是持续推理,减少工控机性能占用;全链路本地运行:从图像采集、算法推理到不良品剔除,所有逻辑全在本地工控机运行,不需要外网、不需要云端服务,哪怕产线断网也能正常运行;异常降级机制:算法推理异常时,系统自动触发产线缓停,同时声光告警,不会让不良品流到下工序,满足汽车行业IATF16949质量要求;模块化解耦:算法核心层和业务逻辑层完全分离,后续更换YOLO模型、新增缺陷类型,只需要替换模型文件,不需要修改业务逻辑;全链路可追溯。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 152

【TC3xx芯片】TC3xx DMA模块详解

TC3xx DMA模块详解

qq_36056498的博客 5915

深入解析CMake中的add_dependencies()命令:功能、语法与示例

在CMake中是管理复杂依赖关系的关键工具。它不仅提高了构建过程的稳定性和可靠性,还帮助开发者显式地定义项目中的构建顺序,减少因依赖问题而导致的构建错误,是高效和规模化软件开发不可或缺的一部分。通过合理配置,可以显著提升项目的构建效率和质量。

m0_73640344的博客 1084

AI颠覆市场调研:生成式智能体如何重构商业决策?

AI正在将市场调研从"成本中心"转变为"战略武器"。当企业能够用生成式智能体实时模拟百万级虚拟用户时,传统调研的样本偏差、时间滞后、成本高昂等问题将不复存在。对于开发者而言,这不仅是技术的狂欢,更是参与商业规则重构的历史机遇。行动建议立即体验Simile/Aaru的智能体平台,验证虚拟样本效果参与LLM持续性记忆架构的开源项目(如Memory Llama)关注AI调研API的标准化进程(如Hugging Face的Market Research Toolkit)

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 614

cmake(十九)Cmake外部项目的导入

一 ExternalProject_Add 灵感来源: 'CI构建'用在非'C/C++'的工程中 注意选择'对应的版本'解读 -->这里选择'3.16、3.17' ① 官网文档 语法: 'ExternalProject_Add'(<name> [<option>...]) ② set(libhello_src ${CMAKE_CURRENT_SOURCE_DIR}/libhello/src) set(libhello_binary ${...

wzj_110的博客 2297

医学图像的对抗攻击:模型安全性与鲁棒性分析

医学图像的对抗攻击:模型安全性与鲁棒性分析 ,人工智能,计算机视觉,大模型,AI,本文围绕医学图像的对抗攻击展开,分析了其对AI模型的威胁。介绍了对抗样本定义、攻击原理,以及FGSM、BIM、PGD等常见攻击方法,还给出了相关代码示例。阐述了攻击对模型诊断准确性和可信度的影响,提出对抗训练、输入预处理、模型集成等提升模型安全性与鲁棒性的方法,探讨了评估指标、数据集和流程,分析了实际应用中的挑战与应对策略,最后展望了未来发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【CMake】add_dependencies命令详解-目标之间显式建立构建顺序依赖关系

add_dependencies(target_name dependency1 dependency2 ...)`用于在 CMake 目标之间显式建立构建顺序依赖关系,确保在构建某个目标前,其依赖的目标已构建完成。它不处理文件级依赖,仅用于控制目标间的构建顺序

weixin_43510208的博客 792

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

cmake:add_dependencies、add_test、add_link_options

设置当前目录和子目录的属性。 set_directory_properties(PROPERTIES prop1 value1 [prop2 value2] ...) 在键值对中设置当前目录及其子目录的属性。 另请参见set_property(DIRECTORY) 命令。 有关每个属性的行为,请参见 Properties on Directorie,了解CMake已知的属性列表及其各自文档。 ...

OceanStar的博客 3302

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

用几句话说一说CMake add_dependencies & target_link_libraries的使用区别

简单说一说前两天学习使用CMake解决链接问题时遇到的一个问题。 对于编译时遇到的依赖问题,很多时候我们只需要一句target_link_libraries就可以搞定。 但是CMake还有另外一个command,add_dependencies。这个什么时候用呢? 一般来说用不到。用到的情况就是两个targets有依赖关系(通过target_link_libraries解决)并且依赖库也是通...

weixin_34101229的博客 2435

CMake命令汇总(1)

add_library:使用指定的源文件向工程中添加一个库。add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN) STATIC库是目标文件的归档文件,在链接其它目标的时候使用。SHARED库会被动态链接,在运行时被加载。MODULE库是不会被...

weixin_30787531的博客 155

CMake 中 add_dependencies 与 find_package 的区别与应用场景解析

理解 add_dependencies 和 find_package 的区别,能够帮助你更有效地管理 CMake 项目中的依赖关系。正确地使用这两个命令,可以确保你的项目构建过程顺利且高效。

scoone的博客 577

CMake 手册详解(五)

CMD#2: add_custom_target 添加一个目标,它没有输出;这样它就总是会被构建。 add_custom_target(Name [ALL] [command1 [args1...]] [COMMAND command2 [args2...] ...] [DEPENDS depend depend

老衲不出家 390

cmake基本用法

cmake基本用法

yulesyu的博客 1万+

cmake 和cmakeList.txt, catkin_make ,catkin_make_isolated总结

cmake 和cmakeList.txt 总结 参考网址:https://www.cnblogs.com/lsgxeva/p/9454443.html cmake 官网参考程序 https://cmake.org/cmake/help/v3.16/ add_dependencies 为顶层目标引入一个依赖关系。 add_dependencies(target-name depend-t...

feidaji的博客 1214

CMAKE 选项 个人整理

 ADD_DEFINITIONS( -DMACRO1 –DMACRO2 … ): 添加-D预编译宏定义,可以一次添加多个。 ADD_DEPENDENCIES(target-name depend-target1 depend-target2 ...) 定义target依赖的其他target,确保在编译本target之前,其他的target已经被构 建。 ADD_EXECUTAB

xiaozhi@fslib.org的博客 2318

CMake常用指令概览:项目管理精髓详尽解析,助你事半功倍

cmake 比autotools 要简单很多。本文涵盖了常用的cmake 指令,包括基本指令、查找指令、安装指令以及控制语句等,特别需要注意的是,在控制语句条件中使用变量,不能用${}引用,而是直接应用变量名。掌握了各种控制指令,应该完全可以通过 cmake 管理复杂的程序了。

Lion_Long的博客 1540

CMAKE实践读书笔记(6)P34-P42

RESULT_VARIABLE选项可用于指定一个变量名,该变量将包含包含文件的结果,如果省略该选项,则文件中定义的变量将在cmake中全局可用。这是因为CMake会在生成Makefile之前先处理所有的CMakeLists.txt文件,因此ENABLE_TESTING()会在ADD_TEST()之前被处理,这就保证了ADD_TEST()的正常运行。是一个 CMake 命令,它用于启用测试。是一个 CMake 命令,用于在指定的路径列表中查找一个指定的文件,并将其结果保存到 CMake 变量中。

reyssalee的博客 287
上一篇: 【CMake】find_package 命令
下一篇: 【git】submodule
Fourier 青年
博客等级 码龄9年 36粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值