当前位置: 首页 > news >正文

【CMake】add_dependencies 命令

【CMake】add_dependencies

原文链接:https://blog.csdn.net/new9232/article/details/125831009
参考链接:https://blog.csdn.net/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】add_dependencies 命令

【CMake】add_dependencies 原文链接&#xff1a;https://blog.csdn.net/new9232/article/details/125831009 参考链接&#xff1a;https://blog.csdn.net/new9232/article/details/121374943 简介 add_dependencies(<target> [<target-dependency>]...)官方文档…...

go语言unsafe.Pointer与uintptr

以下内容来源go语言圣经 1、unsafe.Pointer&#xff0c;相当于c语言中的void *类型的指针&#xff0c;如果需要运算需要转成uintptr类型的指针 2. uintptr uintptr是一个无符号的整型&#xff0c;它可以保存一个指针地址。 它可以进行指针运算。 uintptr无法持有对象, GC不把…...

ddos打到高防cdn上会发生什么

ddos打到cdn上会发生什么?当DDoS攻击打到CDN上时&#xff0c;肯定会影响网站的可用性和用户体验。具体DDoS攻击打到CDN上时&#xff0c;会发生以下情况&#xff1a; CDN节点负载增加&#xff1a;DDoS攻击会导致大量的无效流量涌入CDN节点&#xff0c;从而使得节点负载增加。这…...

【单调栈】503. 下一个更大元素 II

503. 下一个更大元素 II 解题思路 参考496. 下一个更大元素 I 首先计算nums2的每一个元素的下一个比他大的元素&#xff0c;使用单调栈 将上面的结果和nums2中的每一个元素组成映射map 针对每一个Nums1的元素 查询map 记录map 的value 但是这个是循环的数组元素 class So…...

C++ decltype类型

文章目录 1. 工作原理2. decltype 变量3. decltype 表达式4. decltype 函数 1. 工作原理 随着程序越来越复杂&#xff0c;程序中用到的类型也越来越多&#xff0c;我们有时候不得不去翻阅大量上下文去寻找此数据的类型。   decltype就是一种类型说明符&#xff0c;它的出现…...

【题解】JZOJ3854 分组

JZOJ 3854 题意 有 n n n 个人&#xff0c;每个人有地位 r i r_i ri​ 和年龄 a i a_i ai​&#xff0c;对于一个若干人组成的小组&#xff0c;定义其队长为地位最高的成员&#xff08;若相等则取二者均可&#xff09;&#xff0c;其他成员的年龄与队长的差不能超过 k k …...

区块链实验室(26) - 区块链期刊Blockchain: Research and Applications

Elsevier出版物“Blockchain: Research and Applications”是浙江大学编审的期刊。该期刊自2020年创刊&#xff0c;并出版第1卷。每年出版4期&#xff0c;最新期是第4卷第3期(2023年9月)。 目前没有官方的IF&#xff0c;Elsevier的引用因子Citescore是6.4。 虽然是新刊&#xf…...

【学习笔记】[ARC153F] Tri-Colored Paths

假设三种颜色的边都存在&#xff0c;并且不存在这样的路径 首先观察到&#xff0c;对于一个简单环上的边&#xff0c;颜色一定相同 因此&#xff0c;考虑建立圆方树&#xff0c;问题转化为圆方树上的 D P DP DP问题。限制是对于方点所连接的边&#xff0c;必须涂上相同的颜色…...

基于SSM的实习管理系统

基于SSM的实习管理系统、前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 管理员界面 教师 学生 研究背景 基于SSM的实习管理系统是一个基于Spring、Spring…...

在Vue中通过ElementUI构建前端页面【登录,注册】,在IEDA构建后端实现前后端分离

一.ElementUI组件入门 1.对于ElementUI的理解 是一套基于 Vue.js 的开源UI组件库&#xff0c;提供了丰富的可复用组件&#xff0c;可以帮助开发者快速构建美观、易用的前端界面 2.Element UI 的特点和优势 多样化的组件&#xff1a;Element UI 提供了众多常用的基础组件&#…...

TX2 open ttyTHS2

TX2 open ttyTHS2 #冷风那个吹# 于 2019-04-01 14:10:43 发布 1749 收藏 6 分类专栏: 平时问题积累 TX2 版权 平时问题积累 同时被 2 个专栏收录 22 篇文章0 订阅 订阅专栏 TX2 30 篇文章8 订阅 订阅专栏 TX2上有5个串口,但是ttyTHS1是调试串口,ttyTHS3是蓝牙,ttyTHS…...

conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题

上一篇博客《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》解决了conan 1.60.0交叉编译boost/1.80.1的问题后&#xff0c;我继续交叉编译openssl/3.1.2时又报错了 conan install openssl/3.1.2 -pr:h aarch64-linux-gnu.…...

Xcode 15 运行<iOS 14, 启动崩溃问题

如题. Xcode 15 启动 < iOS 14(没具体验证过, 我的问题设备是iOS 13.7)真机设备 出现启动崩溃 解决方案: Build Settings -> Other Linker Flags -> Add -> -ld64...

HTTPS协议概述

HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff0c;基于安全套接字层的超文本传输协议&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础是SSL&#xff0c;…...

jmeterbeanshell调用jsonpath获取对应值

1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码&#xff1a; import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…...

C++中实现雪花算法来在秒级以及毫秒及时间内生成唯一id

1、雪花算法原理 雪花算法&#xff08;Snowflake Algorithm&#xff09;是一种用于生成唯一ID的算法&#xff0c;通常用于分布式系统中&#xff0c;以确保生成的ID在整个分布式系统中具有唯一性。它的名称来源于雪花的形状&#xff0c;因为生成的ID通常是64位的整数&#xff0…...

OPTEE Gprof(GNU profile)

安全之安全(security)博客目录导读 OPTEE调试技术汇总 目录 一、序言 二、Gprof使用 三、Gprof实现 1、Call graph information 2、PC distribution over time 一、序言 本文描述了如何使用gprof对TA进行概要分析。 配置选项CFG_TA_GPROF_SUPPORTy使OP-TEE能够从在用户模…...

MySQL 事务的操作指南(事务篇 二)

基本操作 事务的提交方式&#xff1a;自动提交&#xff08;autocommit1&#xff09;和手动提交&#xff08;autocommit0&#xff09; 查询和修改事务提交方式&#xff1a; -- 查看事务提交方式(标识表示这是个系统变量) select autocommit ;-- 修改事务提交方式为自动提交 …...

Oracle 查询 SQL 语句

目录 1. Oracle 查询 SQL 语句1.1. 性能查询常用 SQL1.1.1. 查询最慢的 SQL1.1.2. 列出使用频率最高的 5 个查询1.1.3. 消耗磁盘读取最多的 sql top51.1.4. 找出需要大量缓冲读取(逻辑读)操作的查询1.1.5. 查询每天执行慢的 SQL1.1.6. 从 V$SQLAREA 中查询最占用资源的查询1.1.…...

gin 基本使用

gin 初体验 import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong",})})r.Run() }gin 路由接受一个 type …...

将Windows 10打造成局域网精准时钟源:NTP服务器配置全攻略

1. 为什么需要局域网NTP服务器&#xff1f; 最近在帮朋友调试一个实验室的监控系统时&#xff0c;遇到了一个典型的时间不同步问题。十几台设备记录的视频时间戳相差从几秒到几分钟不等&#xff0c;排查故障时简直像在玩拼图游戏。这种场景在中小型办公网络、实验室环境特别常见…...

从零开始掌握KLayout版图设计:5个步骤打造专业集成电路设计流程

从零开始掌握KLayout版图设计&#xff1a;5个步骤打造专业集成电路设计流程 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout版图设计工具是开源EDA领域的明星产品&#xff0c;为集成电路设计工程师提供了一…...

GDAL:Windows环境下的高效安装与基础配置指南

1. Windows环境下GDAL安装全攻略 第一次接触GDAL时&#xff0c;我也被官网上密密麻麻的下载选项搞得头晕眼花。作为地理空间数据处理领域的"瑞士军刀"&#xff0c;GDAL确实功能强大&#xff0c;但在Windows平台上的安装过程却让不少新手望而却步。别担心&#xff0c;…...

C++协程(C++20)原理剖析:co_await的实现机制

C20引入的协程机制为异步编程带来了革命性变化&#xff0c;其中co_await作为核心操作符&#xff0c;其实现机制值得深入探讨。本文将剖析co_await背后的魔法&#xff0c;揭示协程如何通过挂起与恢复实现高效异步。 协程三要素解析 协程由promise对象、协程句柄和协程状态三部…...

SmartLabXBeeCore:轻量级XBee/ZigBee嵌入式驱动框架

1. SmartLabXBeeCore&#xff1a;面向嵌入式系统的XBee/ZigBee模块底层驱动框架解析1.1 模块定位与工程价值SmartLabXBeeCore 是一个专为 Digi XBee 和 XBee-PRO ZigBee RF 模块设计的轻量级、可移植嵌入式驱动核心库。其本质并非高层应用协议栈&#xff0c;而是介于硬件抽象层…...

不只是改IP:群晖Docker版与套件版Gitea配置迁移与地址变更全攻略

群晖NAS上Gitea部署方案对比与地址变更深度指南 在私有云和代码托管领域&#xff0c;群晖NAS凭借其稳定的硬件性能和丰富的软件生态&#xff0c;成为许多开发者和技术团队搭建私有Git服务的首选平台。Gitea作为轻量级的自托管Git服务&#xff0c;因其简洁高效的特点&#xff0c…...

六自由度机械臂逆解入门:当你的机械手‘知道’位置,如何反推关节角度?

六自由度机械臂逆解入门&#xff1a;从末端位姿反推关节角度的实战指南 当你第一次让机械臂抓取桌上的水杯时&#xff0c;可能会遇到一个令人困惑的问题&#xff1a;明明知道杯子在三维空间中的精确位置和朝向&#xff0c;却不知道该如何设置六个关节的旋转角度。这就是逆运动学…...

从Bode到ADS:用‘策动点阻抗’判据,给你的电路稳定性加一道‘数学保险’

从Bode到ADS&#xff1a;用策动点阻抗判据为电路稳定性加一道数学保险 在射频电路设计中&#xff0c;稳定性分析就像给高速行驶的赛车安装防抱死系统——它不会直接提升性能&#xff0c;但能确保系统不会在关键时刻失控。传统K因子分析法如同简单的速度表&#xff0c;而策动点阻…...

OpCore-Simplify终极指南:如何快速构建完美的OpenCore EFI配置

OpCore-Simplify终极指南&#xff1a;如何快速构建完美的OpenCore EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的Hackintosh配置…...

PyTorch模型性能分析与瓶颈定位:使用PyTorch Profiler工具详解

PyTorch模型性能分析与瓶颈定位&#xff1a;使用PyTorch Profiler工具详解 1. 为什么需要性能分析工具 训练深度学习模型时&#xff0c;我们经常会遇到这样的困惑&#xff1a;为什么模型训练这么慢&#xff1f;是数据加载拖慢了速度&#xff0c;还是计算本身效率低下&#xf…...