Cmake基础(6)

这篇文章阐述如何添加第三方库

文章目录

  • 包含目录和依赖库
  • 注意事项
      • `target_link_libraries` 基本用法:
      • 修饰词:
        • `PUBLIC`、`PRIVATE`、`INTERFACE`
      • 其他注意事项:
      • `optimized` 和 `debug` 配置标识:
      • 示例:

包含目录和依赖库

把上一篇文章的库工程加进来
把下面的东西放在应用程序的cmake中

# 第三方库的包含目录
target_include_directories(${EXECUTABLE_NAME} PUBLIC "E:/workspace/cmake_demo/simple_demo/module/install/include")# lib库的路径
SET(LINK_LIBRARY optimized "E:/workspace/cmake_demo/simple_demo/module/install/Lib/Release/MYLIB_x64_msvc.lib"debug "E:/workspace/cmake_demo/simple_demo/module/install/Lib/Debug/MYLIB_x64d_msvc.lib")# 添加依赖库
target_link_libraries(${EXECUTABLE_NAME} PUBLIC ${LINK_LIBRARY})

在应用程序中调用库中的接口

#include<iostream>
#include"add.h"
int main(){std::cout<<"hello cmake\n"<< add(1, 2);return 0;
}

注意事项

target_link_libraries 是 CMake 中用于指定目标(例如可执行文件或库)依赖的库的命令。而 PUBLIC 则是一个关键字,用于将依赖项的属性传递给依赖项的消费者。

target_link_libraries 基本用法:

target_link_libraries(target_name library_name)

这条命令表示 target_name 目标依赖于 library_name 库。你可以使用这个命令多次,以指定 target_name 的所有依赖项。

修饰词:

PUBLICPRIVATEINTERFACE
  • PUBLIC 表示这个库的接口(头文件等)会传递给 target_nametarget_name 的依赖项。
  • PRIVATE 表示这个库的接口仅供 target_name 使用,而不会传递给 target_name 的依赖项。
  • INTERFACE 是指这个库的接口不会传递给 target_name,但会传递给 target_name 的依赖项。

其他注意事项:

  • 命名约定:target_link_libraries 中使用的库名称通常是不带前缀 lib 和文件扩展名的。CMake 会根据平台添加正确的前缀和后缀。

  • 依赖项的传递: 使用 PUBLICPRIVATEINTERFACE 修饰词可以更精细地控制依赖项的传递。

  • 变量替代: 你也可以使用变量来代替直接的库名。

set(MY_LIBRARIES my_lib1 my_lib2)
target_link_libraries(my_executable PRIVATE ${MY_LIBRARIES})

target_link_libraries 提供了灵活的方式来管理目标之间的依赖关系,允许你清晰地指定哪些库对哪些目标可见。
抱歉忽略了你的问题。在 CMake 中,target_link_libraries 命令允许你在不同配置(如 Debug、Release)下链接不同版本的库文件。对于 MSVC 编译器,optimizeddebug 是两个常见的配置标识,用于区分 Release 和 Debug 版本的库。

optimizeddebug 配置标识:

  • optimized: 表示 Release 版本,即优化过的版本,适用于正式发布。
  • debug: 表示 Debug 版本,包含调试信息,适用于开发和调试阶段。

示例:

# 添加一个库
add_library(my_lib STATIC my_lib.cpp)# 添加一个可执行文件,它依赖于 my_lib 库
add_executable(my_executable main.cpp)# 链接库,区分 Release 和 Debug 版本
target_link_libraries(my_executabledebug my_lib_d       # 调试版本的库文件optimized my_lib     # Release 版本的库文件
)

在这个示例中,my_lib 是 Release 版本的库文件,my_lib_d 是 Debug 版本的库文件。根据构建类型,CMake 会自动选择合适的版本。

除了 optimizeddebug,还有一些其他配置标识,例如 generalmaxsizeminsizerel 等,可以根据需要选择合适的标识。这些标识的具体含义和用法可以查阅 CMake 官方文档。

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

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

相关文章

【C++】POCO学习总结(十八):XML

【C】郭老二博文之&#xff1a;C目录 1、XML文件格式简介 1&#xff09;XML文件的开头一般都有个声明&#xff0c;声明是可选 <&#xff1f;xml version"1.0" encoding"UTF-8"?>2&#xff09;根元素&#xff1a;XML文件最外层的元素 3&#xff…

java内置的数据结构

Java语言提供了许多内置的数据结构&#xff0c;包括&#xff1a; 1. 数组&#xff08;Array&#xff09;&#xff1a;数组是最基本的数据结构之一&#xff0c;它是一个有序的元素集合&#xff0c;每个元素都有一个对应的索引。在Java中&#xff0c;数组可以通过声明和初始化来创…

Docker使用2-Update the application

写在前面 主题是Update the application&#xff0c;这里是链接 更新项目 承接上个文章&#xff0c;这个文章主要是学习项目内容更新后重新构建image。 编辑上个项目的src/static/js/app.js文件&#xff0c;将第56行注释&#xff0c;添加下面的代码 <p className"…

【从零开始学习--设计模式--策略模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍策…

uniapp全局事件uni.$on,可以不相邻的组件之间传递参数

目录 传送参数页面接受参数页面最后 uniapp全局事件&#xff0c;也就是说&#xff0c;不相邻的&#xff0c;不是父子组件&#xff0c;也可以传递参数。 一个组件&#xff0c;传递项目内所有文件其中一个里面内&#xff0c;可以接受到参数。 传送参数页面 <template><…

每天五分钟计算机视觉:网络中的网络(NiN)

本文重点 前面的课程中我们学习了众多的经典网络模型&#xff0c;比如LeNet、AlexNet、VGG等等&#xff0c;这些网络模型都有共同的特点。 它们的特点是&#xff1a;先由卷积层构成的模块充分提取空间特征&#xff0c;然后再由全连接层构成的模块来输出分类结果。也就是说它们…

C练习题_3答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。 以下正确的C语言自定义标识符是(A)A. la B. 2a C. do D. a.12 2.在C语言中,错误的常数表示是(D) A. OL B. 0x6aL C. ‘6’…

数据结构基础小结

数据结构基础小结 概述 什么是算法&#xff1f; 在计算机领域里&#xff0c;算法是一系列程序指令&#xff0c;用于处理特定的运算和逻辑问题。 衡量算法优劣的主要标准是时间复杂度和空间复杂度。 什么是数据结构&#xff1f; 数据结构&#xff0c;对应的英文单词是 dat…

Apache SeaTunne简介

Apache SeaTunne简介 文章目录 1.Apache SeaTunne是什么&#xff1f;1.1[官网](https://seatunnel.apache.org/)1.2 项目地址 2.架构3.特性3.1 丰富且可扩展的连接器和插件机制3.2 支持分布式快照算法以确保数据一致性3.3 支持流、批数据处理&#xff0c;支持全量、增量和实时数…

C#实现一个安全的事件订阅器

1.解释下什么是事件订阅器 在C#的上下文中&#xff0c;事件订阅器是一种用于处理特定事件的机制。 事件&#xff08;Event&#xff09;&#xff1a;事件是在软件应用程序中发生的事物&#xff0c;如按钮被点击、数据被更改等。在C#中&#xff0c;事件是通过使用event关键字声…

Linux_Docker图形化工具Portainer如何安装并结合内网穿透实现远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…

频谱论文:基于张量Tucker分解的频谱地图构建算法

#频谱# [1]陈智博,胡景明,张邦宁 郭道省.(2023).基于张量Tucker分解的频谱地图构建算法.电子与信息学报(11),4161-4169. &#xff08;陆军工程大学&#xff09; 研究内容 将动态电磁环境的时变频谱地图建模为3维频谱张量&#xff0c;通过张量Tucker分解提取出具有物理意义的核…

【MySQL】(DDL) 数据库操作

创建&#xff1a; create database 数据库名称; //创建数据库 create database if not exists 数据库名 ; //创建数据库并添加判断 &#xff08;如果存在就不创建不存在就创建 &#xff09; create database 数据库名 default charset 字符集 ; //创建数据库并设置字符集 查…

CSRF(跨站脚本请求)

一、漏洞原理 CSRF&#xff08;Cross-Site Request Forgery&#xff09;是一种网络安全攻击&#xff0c;攻击者通过欺骗用户在不知情的情况下发送请求&#xff0c;从而实现对目标网站的操作。 网站管理员(已经登录网站后台)——黑客构造的恶意服务器(是网站的创建用户请求)——…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述&#xff1a; 我们平时说的java字节码&#xff0c;指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为&#xff1a;jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&…

微信小程序vant安装使用过程中遇到无法构建npm的问题

官网地址&#xff0c;然而如果完全按照这个教程来&#xff0c;实际上是缺少步骤的&#xff0c;需要补充一些步骤&#xff08;参考https://www.bilibili.com/video/BV1vL41127Er&#xff09; # 这步init就是补充的 npm init npm i vant/weapp -S --production# 剩下的按照vant的…

人工智能在金融与商业领域的智能化变革

导言 随着人工智能技术的不断发展&#xff0c;金融和商业领域正迎来一场智能化的变革。随着人工智能的不断发展&#xff0c;其在金融和商业领域的应用正成为业界瞩目的焦点。本文将深入探讨人工智能在金融和商业应用中的关键技术、应用场景以及对未来的影响。 1. 关键技术与算…

音频I2S

前言 基于网上资料对相关概念做整理汇总&#xff0c;部分内容引用自文后文章。 学习目标&#xff1a;简单了解相关概念、相关协议。 1 概述 数字音频接口DAI&#xff0c;即Digital Audio Interfaces&#xff0c;顾名思义&#xff0c;DAI表示在板级或板间传输数字音频信…

AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

题目 n(n<500)种球&#xff0c;第i种有ai(0<ai<1e12)个球&#xff0c; m(m<5e5)个盒子&#xff0c;第j个能放bj(0<bj<1e12)个球 特别地&#xff0c;第j个盒子最多能放i*j个第i种球 求m个盒子能放的最多的球的总数 思路来源 官方题解 题解 显然是一个最…

关于pycharm无法进入base界面的问题

问题&#xff1a;terminal输入activate无法进入base 解决方案 1.Cortana这边找到Anaconda Prompt右击进入文件所在位置 2. 右击进入属性 3. 复制cmd.exe开始到最后的路径 cmd.exe "/K" C:\ProgramData\anaconda3\Scripts\activate.bat C:\ProgramData\anaconda3 …