2015年和向上 - 什么是“链接库相关”链接选项实际上是在Visual Studio 2010中吗?

问题描述 投票:50回答:5

截至VS2008,你设置你的本地C ++项目解决方案文件(Project Dependencies ...)的依赖关系,而且如果(默认)的连接选项

Properties -> Linker -> General : Link Library Dependencies = Yes

设置,在Visual Studio版本将在所有项目(DLL文件,LIBS)的.lib文件自动链接,这个项目是依赖将是“静态”的链接。


边注:微软改变了依赖于VS2010是如何工作的,现在你应该直接添加依赖到项目

Common Properties -> Framework and References : (List of depenencies) 

    (each lib/dll has a separate option: 
     Project Reference Properties -> Link Library Dependencies : True|False

我很好这一点。这不是这个问题是关于什么的。

(这里有一种解释:Flexible Project-to-Project References。)


它仍然是可能的。然而对解决方案的水平和General连接选项定义项目的依赖也仍然存在。但是这是行不通的。看到:

特别是在这里看到(acutal问题如下)

当微软确认连接选项没有做什么世界人口的其余希望它做的,并增加了以下的解释:

感谢您报告此反馈。您所遇到的问题是由设计。 “链接库的依赖关系”是一个标志,只决定是否将库传递作为输入到链接。它不会自动查找依赖。作为客户,你将有你的建议手动定义depedency。

谁能解释这意味着什么,或者更重要的是:什么是“链接库相关”链接选项实际上是在Visual Studio 2010中吗?

什么是“输入到链接”实际上没有链接这个应该是一个?

visual-studio-2010 visual-c++ linker dependencies projects-and-solutions
5个回答
39
投票

你必须给的设置适当的值,以带来更为清晰:


8
投票

2017年重新运行。好极了。

TL; DR

此选项设置每个项目的参考实际Link Library Dependecies默认值(A)。如果每个项目引用有LinkLibraryDependecies设置,那么它实际上是毫无意义的。

但是,添加一个新的参考,默认情况下(在VS2010和2015年)在<ProjectReference>文件没有设置一套新vcxproj元素时,那么这个选项是相关的,因为它提供了对所有新添加引用默认情况下,只要作为它们的值不会被修改。

(一):这的确应该是相同的所有配置(调试/发布)和平台的(Win32 / 64)或事情变得非常复杂。

血淋淋的细节

Hans pointed out,它似乎在VS2010没有做任何事情如此。然而,这并不意味着,它实际上是不使用VS / MSBuild的。

关键是这个选项是如何插入vcxprj文件,以及如何在默认设置中的MSBuild文件<ProjectReference>设置工作。

如上述所示的链接器对话框的设置被插入为:

Not actually implemented

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <ItemDefinitionGroup>
    <ClCompile>
...
    </ClCompile>
    <Link>
...
    </Link>
    <ProjectReference>
      <LinkLibraryDependencies>This option is not used by VS 2010!</LinkLibraryDependencies>
    </ProjectReference>
...
  </ItemDefinitionGroup>
</Project>

尽管这似乎与Link选项以某种方式组合在一起,这只是有混淆你。

这是什么实际上做在一个给定vcxproj文件(或从.propsfile到来时),是设置在VS2010 VC设置对话框中的Link Library Dependencies部分每个项目依赖性Frameworks and References值的默认值 -

Link Lib in the References 2010

- 或者在VS2015引用的树 -

Link Lib in the References 2015

这是相关的,因为当你添加一个新的项目引用,在vcxproj文件中的默认项将是这样的:

...
  <ItemGroup>
    <ProjectReference Include="..\W32DynLib1\W32DynLib1.vcxproj">
      <Project>{96be134d-acb5-....-....-....bb6fe4a7}</Project>
    </ProjectReference>
  </ItemGroup>

你会发现,<LinkLibraryDependecies>true|false</..>子元素在这里失去了:这意味着你的“全球”的设置将被实际用来设置默认值。

如果您的全局设置为false(或No),项目引用不会在任何链接。如果是true,它将链接英寸

更重要的是:

  • 如果此设置,LinkLibraryDependency,是完全从您的设置丢失,则默认为真(从MSBuild的文件夹中的Microsoft.Cpp[.Common].propsfile)。
  • 如果你碰巧在全局设置的值This is not used,这将被解释为真。
  • 如果你有值False is the new truth!,也许在此设置No way,它也将构建解释为真。
  • 在VS2015 GUI将显示一个警告,如果它不能在这里解释字符串:String value 'False is the new truth!' cannot be translated to any value from type Boolean.
  • Visual Studio 2010的图形用户界面会显示虚假所有值,除了false,即使建设项目时,这则解释为真。

什么是更:

这似乎与vcproj文件转换旧的解决方案时,该转换器将在slnvcproj项目的链接器选项的值中指定的,和实际设置LinkLibraryDependency每个ProjectReference其插入到新vcxproj旧的依赖 - 这就是一个原因,我认为这是这么久死的选项 - 大部分我们的项目有一个转换的历史可以追溯到VS2005。


6
投票

这里的东西是你必须去,项目属性 - >通用属性 - >框架和引用,然后到你的项目中添加新的参考。那么只有它会在VS 2010中工作,不喜欢在VS的早期版本


5
投票

这已在Properties / Common / Frameworks and References要设置

另外,您可以添加一些像你vcxproj文件下面的东西,当然使用你所引用的实际项目,该项目的UUID。

<ItemGroup>
    <ProjectReference Include="..\Cpp\Cpp.vcxproj">
        <Project>{c58574bf-9dd8-4cf8-b5b6-6551f2f3eece}</Project>
    </ProjectReference>
</ItemGroup>

4
投票

好像你也必须设置

<IgnoreImportLibrary>false</IgnoreImportLibrary>

在引用的项目。

© www.soinside.com 2019 - 2024. All rights reserved.