首页 > 解决方案 > 共享需要外部库的 Visual Studio 项目

问题描述

我不是专业开发 C++ 或专业使用 Visual Studio 的开发人员。希望这个问题不是太琐碎。

包含外部库的标准方法是将它们链接到您的项目设置中。但是,假设我想与几个同事或朋友分享这个项目。显然他们也需要这些必需的库。

在 CMake 中,有一些模块可以以与路径无关的方式检测和加载系统上可用的库。换句话说,借助 cmake 查找库,它会自动将标题和其他所需内容的正确路径放入已配置的解决方案

CMake 中的某些事情变得更加复杂并减慢了开发速度——例如包含和管理资源文件。因此,我想放弃标准 MSBuild Visual Studio 的 CMake。我唯一的挂断是如何创建我的解决方案文件,以便下一个编译我的代码的人不需要库与我位于完全相同的位置?他们是否必须在加载解决方案时自己配置解决方案?这里的标准做法是什么。

谢谢!

标签: c++visual-studiovisual-studio-2017

解决方案


我们对 props 文件使用 MSBuild 支持。

props 文件(例如 envdeppaths.x64.user.props 包含库路径):

<Project DefaultTargets="Build" ...>
  <PropertyGroup Label="EnvDependentPaths">
    <!-- base directory of boost to be used -->
    <BoostDir>c:\dev\libs\boost</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>
     ...

但是,这种方法有一些缺点:

  • 需要手动编辑项目文件
  • props 文件不能简单地检入 VCS,因此干净检出需要手动放置 props 文件

当然还有其他方法。Visual Studio 在配置管理器中包含构建属性的编辑器,无需手动编辑。


推荐阅读