Ответ 1
2017 Re-Run. Yay.
TL; DR
Этот параметр устанавливает значение по умолчанию (a) для фактического Link Library Dependecies
для каждой ссылки на проект. Если каждая ссылка на проект имеет LinkLibraryDependecies
, то это фактически бессмысленно.
Однако при добавлении новой ссылки по умолчанию (в VS2010 и 2015) новый <ProjectReference>
элемент в файле vcxproj
не имеет установленного набора, поэтому этот параметр имеет значение, поскольку он предоставляет значение по умолчанию для все новые добавленные ссылки, если их значение не изменяется.
(a): Это действительно должно быть одинаковым для всех конфигураций (Debug/Release) и Platforms (Win32/x64), или все становится очень сложным.
Сведения о горах
Ганс указал, что, похоже, ничего не делает в VS2010 как таковой. Однако это не означает, что он фактически не используется VS/MSBuild.
Суть заключается в том, как этот параметр вставляется в файл vcxprj
и как настройки по умолчанию работают для параметра <ProjectReference>
в файле msbuild.
Настройка в диалоговом окне Linker, как показано выше, вставляется как:
<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
(или при выходе из файла .props
): установить значение по умолчанию Link Library Dependencies
Значение для каждой зависимости проекта от раздел Frameworks and References
в диалоговом окне настроек VS2010 VC -
- или в поддереве ссылок VS2015 -
И это актуально, потому что когда вы добавляете новую ссылку на проект, запись по умолчанию в вашем файле vcxproj
будет выглядеть так:
...
<ItemGroup>
<ProjectReference Include="..\W32DynLib1\W32DynLib1.vcxproj">
<Project>{96be134d-acb5-....-....-....bb6fe4a7}</Project>
</ProjectReference>
</ItemGroup>
Вы заметите, что здесь отсутствует элемент sub <LinkLibraryDependecies>true|false</..>
: Это означает, что для установки значения по умолчанию будет использоваться "глобальная" настройка.
Если ваша глобальная настройка false
(или No
), ссылка на проект не будет ни в чем. Если он true
, он будет ссылаться.
Что еще:
- Если этот параметр,
LinkLibraryDependency
, полностью отсутствует в ваших настройках, , он будет по умолчанию равным true (из файлаMicrosoft.Cpp[.Common].props
в папке MSBuild). - Если у вас есть значение
This is not used
в вашей глобальной настройке, это будет интерпретироваться как true. - Если у вас есть значение
False is the new truth!
или, возможно,No way
в этом параметре, оно также будет интерпретировано как построенное.] - В VS2015 GUI появится предупреждение, если оно не может интерпретировать строку здесь:
- В графическом интерфейсе VS2010 будет отображаться False для ВСЕХ значений, кроме
false
, хотя при построении проекта это интерпретируется как true.
Что еще больше:
Похоже, что при преобразовании старых решений с файлами vcproj
конвертер будет брать старые зависимости, которые были указаны в sln
и значение параметра проекта vcproj
, и на самом деле установить LinkLibraryDependency
для каждого ProjectReference
он вставляет в новый vcxproj
- это одна из причин, по которой я думал, что это мертвый вариант так долго - большинство наших проектов имеют историю конверсии, относящуюся к VS2005.