如何使 Visual Studio 2017 C++ 项目在计算机之间更具可移植性?
How to make Visual Studio 2017 C++ project more portable between computers?
我正在开发一个依赖于许多第三方库(*.lib 文件和 *.h 文件)的 C++ 项目。我将这些库存储在一个不依赖于项目的文件夹中,例如 C:/thirdpartylib。相对路径不是一个选项,因为它变得太长了。我已经在链接器设置和一般 C++ 设置中定义了与库的连接。
但是当我将项目传递给主管时,他必须重置所有库路径以匹配他的环境。我们使用git,正在跟踪项目文件。他存储第三方库的方式和我不一样
有没有办法让项目更便携?也许可以将路径存储在某种配置文件中?
大型项目的方法是使用包管理器。那里有一些不错的选择。也许在 windows 和 visual studio 中,您可以使用 vcpkg 或 NuGet unmanaged。
如果由于某种原因你不能使用包管理器,接下来要做的是将所有依赖项提交到 GIT 仓库。如果您只针对 windows 平台,例如 windows 8 或 10,并且只想支持 VS2017,那么提交已编译的依赖项不是问题。缺点是 repo 会变得很大。
对于小型学校项目,后一种选择是可行的。
正如@gaurav 所说,在Visual Studio 中处理此问题的方法是使用属性 张。不幸的是,这个术语在 VS 中用于两个不同的事物,但我猜它们只是 ran out of names(剧透警报)。
这些非常强大,一旦您了解了它们的工作原理,它们正是您在这里所需要的,因为它们可以让您定义 宏,而这些宏又可以是在项目的其余部分中用于指代各种库的(易变的)位置。这是每个用过VS的人都应该知道的小技巧,但是好像很多人不知道。
我认为我不值得在这里向您介绍设置的技巧,因为 Microsoft 已经在 Visual Studio 帮助文件中记录了它。可以说,您在 属性 管理器 中进行操作,应该可以帮助您查找相关信息。
这里还有一个很棒的博客 post,我建议您在做任何其他事情之前先阅读一下:
http://www.dorodnic.com/blog/2014/03/20/visual-studio-macros/
它也在 Wayback Machine 上:
好的,现在我们知道如何定义一个宏了,我们可以用它做什么?
好吧,这实际上是最简单的部分。如果我们有一个名为 FOO
的宏,那么只要我们想在某些项目设置或其他地方扩展该宏,我们就可以使用 $(FOO)
。 IDE 中还内置了一堆宏,如下所列:
https://msdn.microsoft.com/en-us/library/c02as0cs.aspx
所以,我想你会想要为每个外部库的 include
和 lib
目录定义宏,然后你可以使用它们来替换硬编码路径您目前正在您的项目中使用。
而且,我认为,应该解决你的问题,因为 宏本身的定义存储在一个单独的文件中 ,在你的项目文件之外,并且不同的用户 /构建机器可以使用不同的文件。 IIRC,这些有扩展名 .props
.
此外,您可以根据另一个宏或多个宏来定义一个宏,这会使工作更加轻松。
所以,谁还认为微软不知道如何创建构建系统? Visual Studio 是一款 很棒的 软件,一旦您习惯了它,就需要一点学习曲线。
我正在开发一个依赖于许多第三方库(*.lib 文件和 *.h 文件)的 C++ 项目。我将这些库存储在一个不依赖于项目的文件夹中,例如 C:/thirdpartylib。相对路径不是一个选项,因为它变得太长了。我已经在链接器设置和一般 C++ 设置中定义了与库的连接。
但是当我将项目传递给主管时,他必须重置所有库路径以匹配他的环境。我们使用git,正在跟踪项目文件。他存储第三方库的方式和我不一样
有没有办法让项目更便携?也许可以将路径存储在某种配置文件中?
大型项目的方法是使用包管理器。那里有一些不错的选择。也许在 windows 和 visual studio 中,您可以使用 vcpkg 或 NuGet unmanaged。
如果由于某种原因你不能使用包管理器,接下来要做的是将所有依赖项提交到 GIT 仓库。如果您只针对 windows 平台,例如 windows 8 或 10,并且只想支持 VS2017,那么提交已编译的依赖项不是问题。缺点是 repo 会变得很大。
对于小型学校项目,后一种选择是可行的。
正如@gaurav 所说,在Visual Studio 中处理此问题的方法是使用属性 张。不幸的是,这个术语在 VS 中用于两个不同的事物,但我猜它们只是 ran out of names(剧透警报)。
这些非常强大,一旦您了解了它们的工作原理,它们正是您在这里所需要的,因为它们可以让您定义 宏,而这些宏又可以是在项目的其余部分中用于指代各种库的(易变的)位置。这是每个用过VS的人都应该知道的小技巧,但是好像很多人不知道。
我认为我不值得在这里向您介绍设置的技巧,因为 Microsoft 已经在 Visual Studio 帮助文件中记录了它。可以说,您在 属性 管理器 中进行操作,应该可以帮助您查找相关信息。
这里还有一个很棒的博客 post,我建议您在做任何其他事情之前先阅读一下:
http://www.dorodnic.com/blog/2014/03/20/visual-studio-macros/
它也在 Wayback Machine 上:
好的,现在我们知道如何定义一个宏了,我们可以用它做什么?
好吧,这实际上是最简单的部分。如果我们有一个名为 FOO
的宏,那么只要我们想在某些项目设置或其他地方扩展该宏,我们就可以使用 $(FOO)
。 IDE 中还内置了一堆宏,如下所列:
https://msdn.microsoft.com/en-us/library/c02as0cs.aspx
所以,我想你会想要为每个外部库的 include
和 lib
目录定义宏,然后你可以使用它们来替换硬编码路径您目前正在您的项目中使用。
而且,我认为,应该解决你的问题,因为 宏本身的定义存储在一个单独的文件中 ,在你的项目文件之外,并且不同的用户 /构建机器可以使用不同的文件。 IIRC,这些有扩展名 .props
.
此外,您可以根据另一个宏或多个宏来定义一个宏,这会使工作更加轻松。
所以,谁还认为微软不知道如何创建构建系统? Visual Studio 是一款 很棒的 软件,一旦您习惯了它,就需要一点学习曲线。