这个answer提到了以下方法链接到通过Nuget安装的C ++库的静态版本[在本例中为“freeglut”]:
Project->Properties->Configuration Properties->Referenced Packages->freeglut->Linkage (select static)
使用Visual Studio 2015,我找不到“Referenced Packages”。我拥有的Nuget包的唯一显式引用是packages.config xml文件。如果我转到项目的“管理Nuget包”部分,我可以安装或卸载,但我找不到包的任何细节。
我搜索了msdn的文档但是所有的页面都专门用于创建一个包,而我需要采用这种方式来使用这样的包。有问题的程序包(Boost Unit Test Framework)可以使用标题,静态或动态链接,我想知道我可以在哪里决定它。
也许我变老了,但Nuget对我来说有点太神奇了......
更新
这就是我所看到的 - 您可以看到安装了Nuget软件包,特别是boost,但是在Configuration属性下没有指向“Referenced packages”的链接:
为完整起见,VS 2015 Enterprise的版本为:
14.0.25431.01 Update 3
我已经检查过,当我安装Boost测试包时,我得到了静态(.lib)和动态(.dll)链接版本,因为我的VS版本的文件存在于packages文件夹中。
答案 0 :(得分:2)
使用Visual Studio 2015,我找不到“Referenced Packages”。
这取决于您是否已将freeglut软件包安装到项目中。如果您创建的C ++项目没有安装任何NuGet包,则无法找到“Referenced Packages”:
安装nuget软件包“freeglut
”后,“Referenced Packages
”和“Project Master Settings
”将添加到Configuration Properties
:< / p>
Boost套餐更新
您应该安装包freeglut
以检查“Referenced Packages
”和“Project Master Settings
”。由于您注意到包freeglut
和Boost
之间的不同行为,因此我想提供有关Native NuGet packages的更多信息。将freeglut
和Boost
安装到项目后,您可以在packages文件夹中找到freeglut.targets
和boost.targets
(.. \ packages \ freeglut.2.8.1.15 \ build \ native&amp; packages \ boost.1.64.0.0 \ build \ native),用记事本或VS打开它们,你会注意到:
在freeglut.targets
:
<PropertyGroup Label="Debug and static and RuntimeLibraryNull" Condition="( $(Configuration.ToLower().IndexOf('debug')) > -1 ) And '$(Linkage-freeglut.ToLower())' == 'static' And ('$(RuntimeLibrary)' == '')">
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</PropertyGroup>
<PropertyGroup Label="Release and static and RuntimeLibraryNull" Condition="( $(Configuration.ToLower().IndexOf('debug')) == -1 ) And '$(Linkage-freeglut.ToLower())' == 'static' And ('$(RuntimeLibrary)' == '')">
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</PropertyGroup>
<PropertyGroup Label="Debug and ltcg and RuntimeLibraryNull" Condition="( $(Configuration.ToLower().IndexOf('debug')) > -1 ) And '$(Linkage-freeglut.ToLower())' == 'ltcg' And ('$(RuntimeLibrary)' == '')">
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</PropertyGroup>
<PropertyGroup Label="Release and ltcg and RuntimeLibraryNull" Condition="( $(Configuration.ToLower().IndexOf('debug')) == -1 ) And '$(Linkage-freeglut.ToLower())' == 'ltcg' And ('$(RuntimeLibrary)' == '')">
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</PropertyGroup>
这会将选项“Referenced Packages
”和“Project Master Settings
”通过PropertyGroup
添加到C ++属性中。
但在boost.targets
文件中,只有:
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\..\lib\native\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
因此,是否添加“Referenced Packages
”和“Project Master Settings
”是基于包的文件夹中的.targets文件。
如果我转到项目的“管理Nuget包”部分,我可以安装或卸载,但我找不到包的任何细节。
在项目的“管理Nuget包”部分的右侧,您可以注意到更多细节描述:
我已经在msdn上搜索了文档,但是所有页面都专门用于创建包,而我需要采用这种方式来使用这种包。
您可以参考文档Consume Packages了解如何使用包。
有问题的软件包(Boost Unit Test Framework)可以使用标头,静态或动态链接,我想知道我可以在哪里决定它。
您可以在项目 - &gt;属性 - &gt;配置属性 - &gt;参考包 - &gt; freeglut:
上做出决定答案 1 :(得分:1)
Boost正在使用自动链接。这意味着,Boost源代码根据构建环境和配置决定使用哪个库(文件)。
更新以下是流程
我同意,这个过程并不明显。为了改进它,Boost应该首先完成模块化。我的意思是,当Boost库(标题和二进制文件)可以单独发货时。