[C++] 在Visual Studio工程中管理C++第三方库

目前的项目依赖于很多第三方库,每次要再一个新的环境编译/运行,都要花很长时间先编译/安装各种第三方库,而且会出现各种问题,因此决定将所有第三方库编译好之后,放入工程的子目录中,以后就不用重复编译了。

目录结构

整理后的目录结构如下:

一些设置

如此修改目录结构之后,VS工程的一些设置需要进行修改,分别说明一下:

输出文件的路径

在工程属性中 Configuration Properties > General > Output Directory 指定的是编译出来的lib/dll/exe存放的路径。

因为需要分平台,分Debug/Release版,所以用到了一些宏:

  • $(SolutionDir)表示solution所在的目录,在这里就是src
  • $(Platform)是当前编译的平台,win32/x64
  • $(Configuration)是当前编译的版本,Debug/Release

修改头文件和库文件的包含目录

相应修改一下就行,使用$(Platform)$(Configuration)这两个宏,可以使各个平台/版本的配置都一样,不需要分开配置。

具体想知道有哪些可以使用的宏,可以再任何一个edit窗口,点击“Macro>>”按钮,展开所有的宏查看。

指定dll所在目录

最后这一条比较重要,因为现在所有第三方库都不用安装了,所以在运行程序的时候如何找到这些dll是一个问题。

exe在运行的时候找dll的顺序如下,理论上把dll加到任何一个环节都可以:

  1. 应用程序所在目录;
  2. 系统目录。GetSystemDirectory返回的目录,通常是系统盘\Windows\System32;
  3. 16位系统目录。该项只是为了向前兼容的处理,可以不考虑;
  4. Windows目录。GetWindowsDirectory返回的目录,通常是系统盘\Windows;
  5. 当前目录。GetCurrentDirectory返回的目录;
  6. 环境变量PATH中所有目录。

我们之前做了这么多事情,就是为了在新的环境中不需要做任何配置就能运行VS的工程,所以任何手动拷文件/修改环境变量的方式都不是最好的。

参考了这篇文章 http://my.oschina.net/u/243648/blog/62847,因为我们的dll分散在很多个文件夹中,最后采取的方法是将这些目录都加到环境变量PATH中,当然不是手动添加,而是加到VS的配置中。

在工程属性中 Configuration Properties > Debugging > Environment 可以添加在VS中运行程序需要添加的一些环境变量,仅对当前工程有效。我们把所有第三方库的路径加进去就行了,注意一定要用相对路径,否则换一台机器还是不能用。这里有个潜在的危险,如果你的系统里面已经装了这个第三方库,并且加到了上面6个环节中的任意一个,可能会引起一些错误。

另外如果出build的话,就需要另写一个脚本,将需要用到的第三方dll和编译出来的程序一起打包,这样就行了。

时间: 2024-11-08 18:12:25

[C++] 在Visual Studio工程中管理C++第三方库的相关文章

用CMake设置Visual Studio工程中第三方库

引用至 https://www.cnblogs.com/xuhui24/p/6234569.html 用CMake设置Visual Studio工程中第三方库 较大的工程文件中一般会调用动态库或者静态库,如果这些库文件是当前工程包含的项目,CMake会自动识别并添加Debug和Release编译时需要的库文件路径和文件名,可以使用命令: Target_Link_Libraries(${PROJECT_NAME} LibName) 但是如果要添加第三方库文件,Debug和Release文件的路径往

转载:在Visual Studio 2013中管理中国特色的社会主义Windows Azure

原文链接: http://www.pstips.net/get-azurechinacloud-settings.html 谷歌被豪迈地放弃了中国市场,微软仍旧在中国市场摸爬滚打,跪着挣钱.其中私人定制的Windows Azure 中国就是代表.那怎样在Visual Studio 2013 中登陆和管理中国版本的Azure呢? 请先安装最新版的Windows Azure PowerShell Client,然后在PowerShell中导入Azure组件,再运行下面的命令: Get-AzurePu

用CMake设置Visual Studio工程中预处理器定义值

构建VS工程时预处理值是不可缺少的,如动态库的导出配置等.在通过CMake构建VS工程时,可以通过CMake命令进行定义,下面讲三种应用. 字符集:默认装填下VS工程是多字节字符集,如果需要使用Unicode字符集,可以用下面命令进行设置: Add_Definitions(-DUNICODE -D_UNICODE) 动态库导出:Lib_DLL为自定义变量名 Add_Definitions(-DLib_DLL) MFC的使用:如果在工程中调用了MFC的函数,需要配置在动态库中使用MFC或者在静态库

ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.JavaScript单元测试等. 方便的获得Web开发者生态圈的工具包. 为了实现这些场景,Visual Studio 2015已经内置了一些流行的第三方工具包: Bower:Web包管理器,Bower可以帮你安装前端包,包括JavaScript.CSS类库.对于服务器端包,请通过NuGet包管理. G

ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bowe

基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.JavaScript单元测试等. 方便的获得Web开发者生态圈的工具包. 为了实现这些场景,Visual Studio 2015已经内置了一些流行的第三方工具包: Bower:Web包管理器,Bower可以帮你安装前端包,包括JavaScript.CSS类库.对于服务器端包,请通过NuGet包管理. G

ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grunt和Gulp都在Visual studio 2015中得到支持.ASP.NET 项目模板默认使用Gulp. Grunt和Gulp Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp performance和优雅的语法受到欢迎.与Grunt不同,Grunt往往在硬盘上是

VS2010如何使用Visual Studio Online在线服务管理团队资源(在线TFS)

前言 Visual Studio Online,也就是以前的Team Foundation Service,从名字可以看出这是一个团队资源管理服务.在微软的云基础架构中运行,无需安装或配置任何服务器,使用既有的IDE(如 Visual Studio.Eclipse 或 Xcode)都可以连接上云服务,管理你的团队资源. 本文主要介绍如何使用Visual Studio S2010连接到Visual Studio Online服务,管理我们的团队资源. 准备工作 (1)安装Visual Studio

Visual Studio 2015中快捷键总结

今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F5: 重启调试Ctrl+Alt+Break:全部中断Ctrl+Alt+F2:显示诊断工具Alt+F2:在不调试的情况下启用诊断工具F7: 查看代码Shift+F7: 查看窗体设计器F9: 切换断点Ctrl+F9: 启用/停止断点Shift+F9:调试是打开QuickWatch,内容是当前光标所在处的

在 Visual Studio 2013 中使用 Grunt, Bower 和 NPM

在 Visual Studio 2015 中提供了对于 Grunt 和 Gulp 的内置支持,在 Visual Studio 2013 中怎么办呢?微软将 2015 中的特性作为几个独立的扩展发布出来,你可以在 Visual Studio 2013 中同样使用这个特性. 实际上,你需要三个扩展. 1. 安装 首先,你需要 Visual Studio 2013.3,也就是说,安装了 Visual Studio 的第三个更新包. 1. Task Runner Explorer Grunt 的可视化任