如何将编译过的C++库迅速部署在Visual Studio新项目中

本文介绍在Visual Studio中,通过属性表,使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C++第三方库的方法。

例如,我们现有一个解决方案,其中的一个项目需要调用ArmadilloOpenCV等多个不同的C++第三方库;我们也已经在这一项目中配置好了所需的各个第三方库,如下图所示。

image

  随后,我们新建了一个解决方案,且这一解决方案中的一个新的项目需要同样需要调用前述项目ArmadilloOpenCV等多个不同的C++第三方库。如下图所示,由于此时我们还没有对新的项目进行第三方库的配置,因此在#include代码中会有报错信息存在。

  针对这一新的项目,我们可以参照文章如何在Visual Studio新C++项目中调用之前配置过的库?中提及的方法,分别对新项目的附加包含目录附加库目录附加依赖项等3个属性加以配置。然而,这样手动配置一次还好,如果今后还会有多个新的项目需要配置同样的第三方库,那么每一次都手动配置就显得十分麻烦。因此,我们可以借助Visual Studio中的属性表,完成这一操作。

  首先,我们需要在原有的项目(也就是已经配置好各类第三方库的项目)中,选择“视图”→“其他窗口”→“属性管理器”选项,如下图所示。

  随后,在“解决方案资源管理器”附近,找到“属性管理器”,并双击项目名称将其展开;随后,基于我们代码需要运行的环境属性(比如Release还是DebugWin32还是x64),将对应的属性信息展开,并右键选择“添加新项目属性表...”。如下图所示,我这里因为希望在Debug版本的x64环境下运行代码,因此就选择在这一环境属性信息对应处右键。

  这里再提一句,如下图所示,我们也可以选择直接在项目名称处右键;但建议大家还是按照实际需求来。

  这样的话,通过我们后续的操作,就会在每一个环境属性信息对应的栏目下出现属性表;如下图所示。

  我们继续前述操作。在选择“添加新项目属性表”后,会弹出“添加新项”窗口;我们在其中配置.props格式的属性表文件的名称与保存路径即可。

  此时,就可以在Debug版本的x64环境对应的一项中,找到我们刚刚创建的属性表,并双击。

  随后,即可弹出属性表的属性页;如下图所示。可以看到,其实这个属性表的属性页就是我们常用的项目的属性窗口

  此时我们要做的,就是将原有项目(也就是已经配置好各类第三方库的项目)的附加包含目录附加库目录附加依赖项等3个属性,复制到属性表的属性页中。这3个属性的位置具体可以参考文章如何在Visual Studio新C++项目中调用之前配置过的库?。

  复制的时候这里也有几个小技巧。首先,我们可以在打开属性表的属性页(或项目的属性页)时,通过切换“解决方案资源管理器”与“属性管理器”的选中状态,无缝切换两个属性页窗口。

  此外,我们可以在原有项目的附加包含目录附加库目录中,通过复制“计算的值”窗口中的内容,实现跨行批量复制,如下图所示。

  然后首先将其复制到文本文件、Word文档文件等作为中转,再将其逐行粘贴值属性表的对应位置处;下图即为复制后的属性表的附加库目录

  而对于附加依赖项,由于其不是一行一行来设置的,因此复制起来就更快一些。

  完成对附加包含目录附加库目录附加依赖项等3个属性的复制工作后,一定记得需要在属性表名称处右键,将其保存。

  随后,我们打开新的项目,也就是待配置第三方库的项目,同样打开“属性管理器”。

随后,在对应的环境属性一栏中,右键并选择“添加现有属性表...”选项。

随后,找到我们刚刚配置好的.props格式的属性表文件,并选择。

此时,在新项目的属性管理器中,就可以看到我们的属性表已经导入了。但是,有时可能会出现如下图所示的情况,即导入属性表后,新的项目依然无法调用这些第三方库。

并且此时双击打开属性表的属性页,发现其中我们刚刚配置的附加包含目录附加库目录附加依赖项等3个属性都还是空白的。

针对这一情况,我们可以首先在新的项目中,在刚刚导入的属性表名称处右键并选择“移除”;随后,将这一新项目所在的解决方案关闭,并再一次在原有项目中保存属性表;随后,将原有项目所在的解决方案关闭,打开新的项目所在的解决方案,重新导入属性表。一般情况下,新的项目就可以使用这些第三方库了。

在今后若有其他新的项目需要配置这些第三方库,我们就可以直接导入这一属性表文件,从而实现快速的环境配置。

至此,大功告成。

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

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

相关文章

爆款短视频素材库有哪些?分享几个容易火的视频素材网站

当今自媒体时代,每位内容创作者都渴望制作出下一个爆款短视频。你是否在寻找那些能让你的视频迅速蹭热度的顶级素材库?本文将为你介绍几个视频素材库,它们或许能成为你成功的秘密武器。首先要提的,自然是著名的国内素材库——蛙学…

fetch-jsonp源码阅读

fetchJsonp源码 源码地址:https://github.com/camsong/fetch-jsonp jsonp优势 请求数据没有跨域的限制,后台不用考虑跨域问题 对于老版本浏览器更加支持 jsonp缺陷 只支持get请求,不支持其他所有方式的请求(请求方式受到了限制)只支持get请求,不支持post(不安…

SAP PP学习笔记24 - 生产订单(制造指图)的创建

上面两章讲了生产订单的元素。 SAP PP学习笔记22 - 生产订单(制造指图)的元素1-CSDN博客 SAP PP学习笔记23 - 生产订单(制造指图)的元素2 - 决济规则(结算规则)-CSDN博客 这一章讲生产订单的创建。比如 - 生产订单的流程&#…

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11(下):YOLO的入门使用一节中,我们已经了解YOLO的使用方法,使用过程非常简单,训练时只需要三行代码:引入YOLO,构建模型,训练模型;预测…

SwiftUI八与UIKIT交互

代码下载 SwiftUI可以在苹果全平台上无缝兼容现有的UI框架。例如,可以在SwiftUI视图中嵌入UIKit视图或UIKit视图控制器,反过来在UIKit视图或UIKit视图控制器中也可以嵌入SwiftUI视图。 本文展示如何把landmark应用的主页混合使用UIPageViewController和…

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

647. 回文子串 题目链接:https://leetcode.cn/problems/palindromic-substrings/ 文档讲解:https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 视频讲解:https://www.bilibili.com/video/BV17G4y1y7z9/ 思路 确定…

Meta CEO 扎克伯格批评闭源AI竞争对手:称其试图“创造上帝”|TodayAI

美国社交媒体巨头Meta(Facebook母公司)的CEO马克扎克伯格(Mark Zuckerberg)近日在一次采访中,公开批评了那些他认为不够开放的AI竞争对手,称他们的行为就像是在“创造上帝”。扎克伯格坚定表示,AI技术不应该被某一家公…

git如何切换到tag分支

项目场景: 当我们需要回退到某个tag分支。 问题描述 通过git命令 git checkout tag_name 执行这个命令后,会提示你当前处于一个“detached HEAD”的状态。 原因分析: 这是因为tag只是一个快照,是不能更改代码的。 解决方案&am…

SysML与MBSE的关系

SysML与MBSE的关系 对于任何基于模型的系统工程 (MBSE) 方法,推荐的最佳实践是基于模型的语言、基于模型的工具、基于模型的流程和基于模型的架构框架的协同应用,如下图所示 系统架构四元组 图。经过十年将SysML应用于棘手的系统…

2535. 数组元素和与数字和的绝对差

给你一个正整数数组 nums 。 元素和 是 nums 中的所有元素相加求和。数字和 是 nums 中每一个元素的每一数位(重复数位需多次求和)相加求和。 返回 元素和 与 数字和 的绝对差。 注意:两个整数 x 和 y 的绝对差定义为 |x - y| 。 示例 1&a…

面试真题及答题思路(二)

题目 某地为了开发旅游资源,花费 600万元建了一个涉嫌抄袭的牛郎织女雕塑,变成了网红打卡地,也吸引了游客,但是部分网民说太丑,花的钱太多。对此,你怎么看?为了缓解辖区内双职工家庭的育儿压力…

戴尔md3400存储控制器脱机故障 电池故障处理

看了一下网上关于DELL MD系列存储故障处理的文档还是比较少的,最近处理了一些关于MD系列存储的问题,稍微整理整理就分享一下,各位喜欢摸索的朋友可以稍稍做些参考,当然如果想寻求外援的也可以快速的找到合适的人。以便安全又快捷的…

C语言基础——操作符

ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言 一、操作符的分类 二、二进制和进制转换 2.1 二进制转十进制 2.1.1 十…

零知识证明基础:数字签名

1、绪论 数字签名(Digital Signature),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者…

pyqt5 制作视频剪辑软件,切割视频

该软件用于切割视频,手动选取视频片段的起始帧和结束帧并保存为json文件。gui界面如下:包含快进、快退、暂停等功能, 代码如下: # coding=UTF-8 """ theme: pyqt5实现动作起始帧和结束帧的定位,将定位到的帧数保存json文件 time: 2024-6-27 author: cong…

详细介绍LP-SCADA系统的核心数据采集单元

关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 SCADA系统的数据采集功能是其核心组成部分,它允许系统从各种传感器、仪器和设备中收集实时数据。以下是SCADA系统数据采集功能的详细描述: 传感器和…

Kotlin vs Java:深入解析两者之间的最新差异与优劣(全面指南)

文章目录 1. 概述2. 语法简洁性3. 空安全4. 扩展函数5. 协程6. 数据类7. 智能类型转换8. 默认参数与命名参数9. 无 checked exceptions10. 单例模式总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨…

Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时,用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull,但是敲着敲着发现不对劲,怎么没有nonNull方法?? 其实时我少敲了一个s,当时自己并没有很清楚Object和Objects两者之前的区别&#xf…

LangGPT:高质量提示词框架

题目:LangGPT: Rethinking Structured Reusable Prompt Design Framework for LLMs from the Programming Language作者: Ming Wang; Yuanzhong Liu; Xiaoming Zhang; Songlian Li; Yijie Huang; Chi Zhang; Daling Wang; Shi Feng; Jigang LiDOI: 10.48550/arXiv.2…

Qt自定义信号

1.Teacher类下定义信号signals: Student类下定义槽函数&#xff1a; Teacher.h #pragma once#include <QObject>class Teacher : public QObject {Q_OBJECTpublic:Teacher(QObject *parent);~Teacher(); signals:void Ask(); //老师向学生提问void Ask(QString str);…