共享需要外部库的 Visual Studio 项目
Sharing a Visual Studio Project that requires External Libraries
我不是一个专业地做C++或专业地使用Visual Studio编程的开发人员。希望这个问题不是太微不足道。
包含外部库的标准方法是在项目设置中链接它们。但是,假设我想与一些同事或朋友分享这个项目。显然,他们也需要这些必需的库。
在 CMake 中,有一些模块用于检测和加载系统上以独立于路径的方式提供的库。换句话说,通过 cmake 找到库,它将自动为配置的解决方案中的标头和其他所需内容放置正确的路径。
CMake 中的某些内容变得更加复杂并减慢了开发速度 - 例如,包含和管理资源文件。因此,我想放弃CMake,转而使用标准的MSBuild Visual Studio。我唯一的挂断是我如何以这样一种方式创建我的解决方案文件,下一个编译我的代码的人不需要库与我完全相同的位置?他们是否必须在加载解决方案时自行配置解决方案?这里的标准做法是什么。
谢谢!
因此,我想放弃CMake,转而使用标准的MSBuild Visual Studio。我唯一的挂断是我如何以这样一种方式创建我的解决方案文件,下一个编译我的代码的人不需要库与我完全相同的位置?他们是否必须在加载解决方案时自行配置解决方案?这里的标准做法是什么。
取决于。当可以从 NuGet 获取外部库时,这很容易。只需让 VS 在第一次构建时还原任何依赖项即可。文件将登陆解决方案\包。
如果有 DLL 的源代码要添加到特定于项目的解决方案中,则可以将它们包含在解决方案\Subdir 中,其目标 DLL 和 LIB 将最终出现在解决方案\调试或 \x64\调试中。
如果解决方案中存在没有源的外部 DLL,则将它们放在 \Debug 或 \x64\Debug 中似乎是合乎逻辑的。
有时您无法重新编译或移动DLL内容。在这种情况下,请右键单击解决方案中的项目,菜单属性,选择配置,链接器,常规和输入。在那里,您可以指定其他库子目录和其他库。
结束提示:关于这个"配置解决方案">评论......你来自CMake世界,你习惯于手动编辑配置内容。不要在VS中为此烦恼。将.sln内部留给 VS,只需使用 VS-2017 UI 来维护即可。
我们使用 MSBuild 对 props 文件的支持。
props 文件(例如包含库路径的 envdeppaths.x64.user.props(:
<Project DefaultTargets="Build" ...>
<PropertyGroup Label="EnvDependentPaths">
<!-- base directory of boost to be used -->
<BoostDir>c:devlibsboost</BoostDir>
...
这些文件包含库路径(在某些情况下,标头和二进制文件是分开的(, 预处理器定义需要等。
它们在项目文件中导入,如下所示:
<Project DefaultTargets="Build" ...
<ItemGroup Label="ProjectConfigurations">
<ImportGroup Label="EnvDependentPaths">
<Import Project="$(SolutionDir)envdeppaths.$(Platform).user.props"
Condition="exists('$(SolutionDir)envdeppaths.$(Platform).user.props')"
Label="EnvDependentPaths" />
</ImportGroup>
...
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>$(BoostDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
...
但是,这种方法有一些缺点:
- 需要手动编辑项目文件 道具文件
- 不能简单地签入VCS,所以干净的检出需要手动放置道具文件
当然还有其他方法。Visual Studio 包含配置管理器中生成属性的编辑器,无需手动编辑。
我在几个地方看到的是将库作为项目的一部分放在源代码管理中,放在一个单独的文件夹下,例如/extern/。
然后,在项目的包含和 lib dirs 设置中使用相对路径来引用此外部路径
通过这种方式,您可以很好地控制编译项目所依据的库版本,并且新版本的集成可以在源代码管理存储库中提交一次。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板