gpt4 book ai didi

c++ - 为通过 Nuget 安装的 C++ 库设置链接类型

转载 作者:太空狗 更新时间:2023-10-29 20:52:32 24 4
gpt4 key购买 nike

answer提到以下方法链接到通过 Nuget 安装的 C++ 库 [在本例中为“freeglut”] 的静态版本:

Project->Properties->Configuration Properties->Referenced Packages->freeglut->Linkage (select static) 

在 Visual Studio 2015 中,我找不到“引用包”。我拥有的对 Nuget 包的唯一明确引用是 packages.config xml 文件。如果我转到项目的“管理 Nuget 包”部分,我可以安装或卸载,但找不到该包的任何详细信息。

我在 msdn 上搜索了文档,但所有页面都专门用于创建一个包,而我需要说明使用这种包的方式。有问题的包(Boost Unit Test Framework)只能用于 header ,静态或动态链接,我想知道我可以在哪里决定它。

也许我老了,但 Nuget 对我来说有点太神奇了......

更新

这就是我所看到的——您可以看到安装了 Nuget 包,特别是 boost,但是在配置属性下没有指向“引用包”的链接: screenshot of Nuget installed packages and of the Configuration Properties without a link to "Referenced Packages

为了完整起见,VS 2015 Enterprise 的版本是:

14.0.25431.01 Update 3

而且我已经检查过,当我安装 Boost 测试包时,我得到了静态 (.lib) 和动态 (.dll) 链接版本,因为我的 VS 版本的文件存在于包文件夹中。

最佳答案

With Visual Studio 2015 I can't find "Referenced Packages".

这取决于您是否在项目中安装了 freeglut 包。如果您在没有安装任何 NuGet 包的情况下创建 C++ 项目,则找不到“引用包”:

enter image description here

安装 nuget 包后freeglut”、“Referenced Packages”和“Project Master Settings” "将添加到 配置属性:

enter image description here

Boost 包更新:您应该安装包 freeglut 以检查“Referenced Packages”和“Project Master Settings”。由于您注意到包 freeglutBoost 之间的不同行为,我想提供更多关于 Native NuGet packages 的信息.在你的项目中安装了 freeglutBoost 之后,你可以找到 freeglut.targetsboost.targets在packages目录下(..\packages\freeglut.2.8.1.15\build\native & packages\boost.1.64.0.0\build\native),用记事本或者VS打开,你会发现:

freeglut.targets 中:

<PropertyGroup Label="Debug and static and RuntimeLibraryNull" Condition="( $(Configuration.ToLower().IndexOf('debug')) &gt; -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')) &gt; -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>

这将通过 PropertyGroup 将选项“Referenced Packages”和“Project Master Settings”添加到 C++ 属性中。

但是在boost.targets 文件中,只有:

   <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\..\lib\native\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>

因此,是否添加“Referenced Packages”和“Project Master Settings”取决于包文件夹中的 .targets 文件。

If I go to the "Manage Nuget packages" section of the project I can install or un-install but I can't find any detail of the package.

在项目的“Manage Nuget packages”部分的右侧,您可以注意到一些更详细的说明:

enter image description here

I have searched msdn for documentation but all the pages are devoted to the creation of a package, while I need to espress the way to consume such a package.

可以引用文档Consume Packages了解如何使用包。

The package in question (Boost Unit Test Framework) can be used header-only, with static or with dynamic linkage and I would like to know where I can decide it.

可以在Project->Properties->Configuration Properties->Referenced Packages->freeglut中决定:

enter image description here

关于c++ - 为通过 Nuget 安装的 C++ 库设置链接类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45785216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com