如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
How to make Visual Studio 2017 C++ project more portable between computers?
我正在C++上开发一个依赖于许多第三方库(*.lib文件和*.h文件(的项目。我将这些库存储在一个不依赖于项目的文件夹中,比如C:\thirdpartylib。相对路径不是一个选项,因为它变得太长了。我已经在链接器设置和一般C++设置中定义了到库的连接。
但当我把这个项目交给主管时,他必须重新设置到库的所有路径,以匹配他的环境。我们使用git,并且正在跟踪项目文件。他用另一种方式储存第三方图书馆,而不是我
有什么方法可以使项目更具可移植性吗?也许可以将路径存储在某种配置文件中?
正如@gaurav所说,在Visual Studio中处理此问题的方法是使用属性表。不幸的是,这个词在VS中用于两种不同的东西,但我想它们只是没有名字了(剧透提醒(。
一旦你了解了它们的工作原理,它们就会非常强大,而它们正是你在这里所需要的,因为它们可以让你定义宏,而这些宏反过来可以在你的项目的其余部分中使用,以引用你的各种库的(易失性(位置。这是一个每个使用VS的人都应该知道的技巧,但似乎很多人都不知道。
我认为我不值得在这里向您介绍设置机制,因为Microsoft已经在Visual Studio帮助文件中对其进行了文档记录。只需说,您可以在物业经理中进行操作,这将有助于您追踪相关信息。
这里还有一篇优秀的博客文章,我建议你在做其他事情之前先阅读:
http://www.dorodnic.com/blog/2014/03/20/visual-studio-macros/
它也在这里的Wayback Machine上:
https://web.archive.org/web/20171203113027/http://www.dorodnic.com/blog/2014/03/20/visual-工作室宏/
好的,现在我们知道如何定义宏了,我们能用它做什么?
其实这才是最简单的部分。如果我们有一个名为FOO
的宏,那么无论我们想在某个项目设置或其他设置中扩展该宏,我们都可以使用$(FOO)
。IDE中还内置了一堆宏,如下所示:
https://msdn.microsoft.com/en-us/library/c02as0cs.aspx
因此,我想,您将希望为每个外部库的include
和lib
目录定义宏,然后可以使用这些宏来替换您当前在项目中使用的硬编码路径。
我认为,这应该会让你明白,因为宏的定义本身存储在一个单独的文件中,在项目文件外部,不同的用户/构建机器可以使用不同的文件。IIRC,它们具有扩展.props
。
此外,您还可以用另一个或多个宏来定义宏,这会使工作更容易。
那么,谁还会认为微软不知道如何创建一个构建系统呢?Visual Studio是一款出色的软件,一旦你习惯了它,就会有一点学习曲线。
大型项目的方法是使用包管理器。有一些不错的选择。也许在windows和visualstudio中,您可以使用vcpkg或NuGet进行非托管。
如果由于某种原因无法使用包管理器,那么接下来要做的就是将所有依赖项提交给GIT回购。如果你只针对像windows 8或10这样的windows平台,并且只想支持VS2017,那么提交编译后的依赖项不是问题。不利的一面是回购将变得巨大。
对于一个小型学校项目,后一种选择是可行的。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- Visual Studio 中的套接字 c++ 应用程序无法通过两台计算机之间的以太网连接工作
- 在计算机之间使用C 传输文件
- 两台计算机之间的行为不同
- 在计算机之间发送XML数据 - Qt.
- C# 和 C++ 代码之间的链接在 64 位计算机中不起作用
- opencvmatchTemplate在计算机之间给出不一致的结果
- 在具有C++的计算机之间发送文件
- 同一网络中两台计算机之间的客户端-服务器应用程序(使用boost::asio)
- 如何在linux程序和windows程序之间通过Wine(同一台计算机)共享内存
- 两台计算机之间的通信没有打开端口,使用第三台计算机建立连接
- 有没有一种方法可以在没有while循环的情况下在计算机之间传输数据?c++
- OpenGL绘制两台计算机之间的差异
- 程序的调用堆栈限制在计算机之间是否完全一致
- <random> 不同计算机之间的C++行为不一致
- 计算机如何在类型之间转换
- 管道可以在局域网计算机之间使用吗