Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
共享需要外部库的Visual Studio项目 我不是一个专业的C++开发人员,也不是专业的Visual Studio程序开发人员。希望这个问题不是太琐碎_C++_Visual Studio_Visual Studio 2017 - Fatal编程技术网

共享需要外部库的Visual Studio项目 我不是一个专业的C++开发人员,也不是专业的Visual Studio程序开发人员。希望这个问题不是太琐碎

共享需要外部库的Visual Studio项目 我不是一个专业的C++开发人员,也不是专业的Visual Studio程序开发人员。希望这个问题不是太琐碎,c++,visual-studio,visual-studio-2017,C++,Visual Studio,Visual Studio 2017,包含外部库的标准方法是在项目设置中链接它们。然而,假设我想与一些同事或朋友分享这个项目。显然,他们也需要这些必需的库 在CMake中,有一些模块用于检测和加载系统上以路径独立方式提供的库。换句话说,借助cmake查找库,它将自动为配置的解决方案中的头文件和其他所需内容设置正确的路径 CMake中的某些事情变得更加复杂,并且会减慢开发速度—例如,包括和管理资源文件。因此,我想放弃标准MSBuild Visual Studio的CMake。我唯一的问题是如何创建我的解决方案文件,这样下一个编译我的代

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

在CMake中,有一些模块用于检测和加载系统上以路径独立方式提供的库。换句话说,借助cmake查找库,它将自动为配置的解决方案中的头文件和其他所需内容设置正确的路径

CMake中的某些事情变得更加复杂,并且会减慢开发速度—例如,包括和管理资源文件。因此,我想放弃标准MSBuild Visual Studio的CMake。我唯一的问题是如何创建我的解决方案文件,这样下一个编译我的代码的人就不需要库和我在同一个地方了?他们是否必须在加载解决方案时自行配置它?这里的标准做法是什么


谢谢大家!

我们对props文件使用MSBuild支持

道具文件(例如,包含库路径的envdepath.x64.user.props):


c:\dev\libs\boost
...
这些文件包含库路径(在某些情况下,头文件和二进制文件是分开的), 预处理器定义所需的参数等

它们被导入到项目文件中,如下所示:

<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>
     ...

我在几个地方看到的做法是将库作为项目的一部分放在源代码管理中,放在一个单独的文件夹下,例如/extern/

然后在项目的include和lib dirs设置中使用相对路径来引用此外部路径

通过这种方式,您可以很好地控制编译项目所依据的库的版本,并且新版本的集成可以在源代码管理存储库中一次提交

“因此,我想放弃标准MSBuild Visual Studio的CMake。我唯一的问题是如何创建我的解决方案文件,这样下一个编译我的代码的人就不需要库和我在同一个地方了?他们是否必须在加载解决方案时自行配置它?这里的标准做法是什么。”

依赖。当外部库可以从NuGet获取时,这很容易。只需让VS还原第一个构建上的任何依赖项。文件将在Solution\packages中登录

如果有特定于您的项目的带有源代码的DLL要添加到解决方案中,您可以将它们包含在解决方案\Subdir中,它们的目标DLL和库最终将位于solution\Debug或\x64\Debug中

如果解决方案中有没有源的外部DLL,那么将它们放在\Debug或\x64\Debug中似乎是合乎逻辑的

有时您无法重新编译或移动DLL内容。在这种情况下,请右键单击“解决方案”、“菜单属性”中的项目,选择“配置”、“链接器”、“常规”和“输入”。在那里,您可以指定其他库子目录和其他库

结束提示:关于这个“配置解决方案”的评论..你来自一个CMake世界,你习惯于手工编辑配置内容。在VS中不必担心这一点。将sln内部组件留给VS,只需使用VS-2017 UI来维护即可

<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>
     ...