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

visual,studio · 浏览次数 : 0

小编点评

**使用属性表快速配置第三方库** **步骤 1:选择现有项目中的属性管理器** * 打开 Visual Studio。 * 选择“视图”→“其他窗口”→“属性管理器”选项。 **步骤 2:添加新项目属性表** * 在属性管理器中,基于我们代码需要运行的环境属性,将对应的属性信息展开。 * 右键选择“添加新项目属性表…”。 **步骤 3:配置属性表** * 选择“.props”格式的属性表文件。 * 在属性页中配置所需的属性,例如附加包含目录、附加库目录与附加依赖项。 * 复制属性表文件中的属性值,将其粘贴到新项目的属性页面中对应的位置。 **步骤 4:添加现有属性表** * 在新项目的属性管理器中,右键并选择“添加现有属性表...”选项。 * 选择我们刚刚配置的属性表文件。 **步骤 5:测试配置** * 在新项目的属性页面中,确保所有属性值都正确填写。 * 启动新项目的解决方案,检查是否可以正常调用第三方库。

正文

  本文介绍在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个属性都还是空白的。

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

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

  至此,大功告成。

与将编译过的C++库迅速部署在Visual Studio新项目中相似的内容:

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

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

深度解读《深度探索C++对象模型》之默认构造函数

C++的默认构造函数的作用是什么?什么时候会需要一个默认构造函数,以及默认构造函数从哪里来?这篇文章将从编译器的角度来分析这个问题。

cmake-4

cmake-4学习,参考 cmake构建c++项目快速入门2-1 cmake构建c++项目快速入门2-2 了解 cmake的工作原理: Windows下用cmake编译cmake (1)先下载cmake(exe) (2)编译源码文件 # -S表示源文件夹下;-B表示新建一个文件夹build,并将编译

深度解读《深度探索C++对象模型》之数据成员的存取效率分析(二)

C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++类的不同定义形式来一一分析C++对象的数据成员的访问在编译器中是如何实现的,以及它们的存取效率如何?

C++面向对象

1. C++语言基础 1.1 函数 C++新增:多态 函数重载( overload ) 函数重写(覆写,overrride) 编译器会根据实参的类型来⾃动确定调⽤哪个重载函数 C++新增:内联函数 修饰关键字:inline 作用:编译时直接将函数替换为一堆代码,减少函数调用带来的开销。 比#defi

[WPF]使用HLSL实现百叶窗动效

百叶窗动画是制作PPT时常用的动画之一,本文将通过实现百叶窗动画效果的例子介绍在WPF中如何使用ShaderEffect。ShaderEffect使用高级着色器语言(High Level Shading Language,HLSL)事先制作好并且已经编译过的效果。先看下百叶窗动画实现效果: ![im

3步带你搞定华为云编译构建CodeArts Build “新手村任务”

本文将给各位开发者带来华为云CodeArts Pipeline的手把手初级教学,让没有接触过的开发者能够轻松上手体验。

编译打包rabbitmq然后一键部署的简单方法

摘要 之前总结过一版,但是感觉不太全面 想着本次能够将使用中遇到的问题总结一下. 所以本次是第二版 介质下载 rabbitmq 不区分介质的打包文件 rabbitmq-server-generic-unix-3.11.6.tar.xz 注意需要上官网.公司的网络无法下载.建议自行查找 erlang的

Linux 安装软件的几种方式

哈喽大家好,我是咸鱼 相信小伙伴们都知道在 Linux 中,安装软件一般有三种方式 * yum 安装 * rpm 安装 * 源码编译安装 咸鱼平时三种安装方式都会用,但是具体原理和区别却没有去深入了解过 结果上周部门刚来的新人问我这几种安装方式的时候,一下子把我问懵了 那么今天咸鱼将会向小伙伴们介绍

.NET Emit 入门教程:第七部分:实战项目1:将 DbDataReader 转实体

经过前面几个部分学习,相信学过的同学已经能够掌握 .NET Emit 这种中间语言,并能使得它来编写一些应用,以提高程序的性能。随着 IL 指令篇的结束,本系列也已经接近尾声,在这接近结束的最后,会提供几个可供直接使用的示例,以供大伙分析或使用在项目中。