Visual Studio — Установка типа связи для библиотеки C ++, установленной через Nuget

это ответ упоминает следующий метод для ссылки на статическую версию библиотеки C ++ [в данном случае «freeglut»], установленную через Nuget:

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

В Visual Studio 2015 я не могу найти «ссылочные пакеты». Единственная явная ссылка на пакеты Nuget, которую я имею, — это файл packages.config xml. Если я зайду в раздел «Управление пакетами Nuget» проекта, я могу установить или удалить его, но не смогу найти какие-либо детали пакета.

Я искал в msdn документацию, но все страницы посвящены созданию пакета, в то время как мне нужно выделить способ использования такого пакета. Рассматриваемый пакет (Boost Unit Test Framework) может использоваться только для заголовков, со статическим или с динамическим связыванием, и я хотел бы знать, где я могу это решить.

Может быть, я старею, но Nuget для меня слишком волшебен …

ОБНОВИТЬ

Это то, что я вижу — вы можете видеть, что установлены пакеты Nuget, в частности boost, но в свойствах Configuration нет ссылки на «Ссылочные пакеты»:
снимок экрана с установленными пакетами Nuget и свойствами конфигурации без ссылки на

Для полноты версии VS 2015 Enterprise:

14.0.25431.01 Обновление 3

и я проверил, что, когда я установил Boost Test Package, я получил как статическую (.lib), так и динамическую (.dll) версии связей, так как файлы для моей версии VS присутствуют в папке пакетов.

2

Решение

В Visual Studio 2015 я не могу найти «ссылочные пакеты».

Это зависит от установлен ли у вас пакет freeglut в ваш проект. Если вы создаете проект C ++ без установленного пакета NuGet, вы не можете найти «Связанные пакеты»:

введите описание изображения здесь

После установки пакета nuget «freeglut«,»Referenced Packages» а также «Project Master Settings«добавил бы к Configuration Properties:

введите описание изображения здесь

Обновление для Boost Package:
Вы должны установить пакет freeglut проверить «Referenced Packages» а также «Project Master Settings«. Так как вы заметили различное поведение между пакетами freeglutа также BoostЯ хотел бы предоставить больше о Нативные пакеты NuGet. После установки freeglut а также Boost в вашем проекте, вы можете найти freeglut.targets а также boost.targets в папке с пакетами (.. \ packages \ freeglut.2.8.1.15 \ build \ native & пакетов \ 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>

Это добавит опции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 документацию, но все страницы посвящены созданию пакета, в то время как мне нужно выделить способ использования такого пакета.

Вы можете обратиться к документу Потреблять пакеты о том, как потреблять пакет.

Рассматриваемый пакет (Boost Unit Test Framework) может использоваться только для заголовков, со статическим или с динамическим связыванием, и я хотел бы знать, где я могу это решить.

Вы можете решить это в Project-> Properties-> Configuration Properties-> Referenced Packages-> freeglut:

введите описание изображения здесь

2

Другие решения

Boost использует автоматическое связывание. Это означает, что исходный код Boost решает, какую библиотеку (файл) использовать в зависимости от среды сборки и конфигурации.

Обновить Вот процесс

  1. Вы добавляете Boost заголовки только в пакете NuGet к вашему проекту.
  2. В зависимости от того, что вы используете и собираете конфигурацию, для Boost могут потребоваться дополнительные библиотеки (файлы lib). В этом случае вы получите ошибку компиляции / компоновки.
  3. В зависимости от ошибки компиляции / компоновки, вы добавляете в свой проект дополнительные пакеты NuGet с предварительно скомпилированными библиотеками Boost из Вот

Я согласен, процесс не очевиден. Чтобы улучшить его, Boost должен сначала завершить их модульность. Я имею в виду, когда библиотеки Boost (заголовки и двоичные файлы) могут поставляться отдельно.

1

По вопросам рекламы [email protected]