Как создать файл SLN из командной строки, используя инструменты сборки MSVC - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь собрать проект Hunspell на GitHub с помощью инструментов сборки MSVC 2017: https://github.com/hunspell/hunspell

В проекте есть папка msvc, содержащая файлы Hunspell.sln и libhunspell.vcxproj (мне интереснов библиотеке)

Мои настройки:

  • Windows 10
  • Инструменты сборки MSVC2017 (15.9.3)
  • Комплект Windows 10: 10.0.17763.0

Если я открою «Командную строку собственных инструментов x86 для VS 2017» и попытаюсь построить решение, я получу следующую ошибку:

>msbuild libhunspell.vcxproj
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 2018/12/01 6:01:18 PM.
Project "c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140_xp\Toolset.targets(36,5): warning MSB8003: Could not find WindowsSdkDir_71A variable from the registry.  TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(366,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry.  TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]
InitializeBuildStatus:
  Touching "Debug\libhunspell\libhunspell.tlog\unsuccessfulbuild".
PreBuildEvent:
  echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h
  :VCEnd
  Overwrite ..\src\hunspell\hunvisapi.h? (Yes/No/All): N
          0 file(s) copied.
ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe /c /I..\src\hunspell /I. /ZI /nologo /W4 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _WINDOWS /D _USRDLL /D HUNSPELL_STATIC /D _CRT_SECURE_NO_WARNINGS /D _USING_V110_SDK71_ /D_MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\libhunspell\\" /Fd"Debug\libhunspell\libhunspell.pdb" /Gd /TP /wd4706 /wd4251 /wd4267 /analyze- /errorReport:queue ..\src\hunspell\csutil.cxx 
csutil.cxx
c:\development\hunspell\hunspell-1.7.0\src\hunspell\csutil.cxx(84): fatal error C1083: Cannot open include file: 'windows.h': No such file or directory [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]
Done Building Project "c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj" (default targets) -- FAILED.


Build FAILED.

"c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj" (default target) (1) ->
(CheckWindowsSDK71A target) ->
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140_xp\Toolset.targets(36,5): warning MSB8003: Could not find WindowsSdkDir_71A variable from the registry.  TargetFrameworkVersion or PlatformTool set may be set to an invalid version number. [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]


"c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj" (default target) (1) ->
(PrepareForBuild target) ->
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(366,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry.  TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]


"c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj" (default target) (1) ->
(ClCompile target) ->
  c:\development\hunspell\hunspell-1.7.0\src\hunspell\csutil.cxx(84): fatal error C1083: Cannot open include file: 'windows.h': No such file or directory [c:\Development\Hunspell\hunspell-1.7.0\msvc\libhunspell.vcxproj]

Важная часть вВыше приведено следующее: Невозможно открыть включаемый файл: 'windows.h'

Кажется, что моя консоль настроена правильно при просмотре переменной INCLUDES:

echo %INCLUDE%
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt

Я пробовал многотакие параметры, как запуск без изменений:

> msbuild libhunspell.vcxproj /p:AdditionalIncludeDirectories="C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um"

Я также добавил полный путь к папкам "um" и "shared" (для winapifamily.h) в свойство <AdditionalIncludeDirectories> вручную вфайл vcxproj.Это работает для статических библиотек, но мне пришлось добавить <AdditionalIncludeDirectories> к шагу <ResourceCompile>.Для dll (Release_Dll и т. Д.) Линковка не сработала, так как я не знаю, как это исправить (пока).
Выше я чувствую себя неправильно, я не думаю, что решение может быть взломать файл проектачтобы компилятор знал, где находятся его собственные файлы.

Любая помощь в этом отношении будет принята.

Примечание. У меня не установлена ​​Visual Studio IDE, большинство вопросов SO по этому вопросу связаны сшаги для решения проблемы путем изменения настроек в Visual Studio.Это не относится к этому вопросу.

PS: У меня нет опыта работы с msbuild или инструментами сборки.Я обычно использую Qt Creator IDE для сборки с компилятором MSVC.

1 Ответ

0 голосов
/ 03 декабря 2018

Как создать файл SLN из командной строки с помощью инструментов сборки MSVC

Отдельные компоненты VC++ 2015.3 v14.00 (v140) toolset for desktop следует устанавливать с помощью инструментов сборки.

Согласно журналу ошибок:

Для TargetFrameworkVersion или PlatformToolset может быть задан неверный номер версии

Когда мы открываем libhunspell.vcxproj с помощью блокнотаМы могли бы знать следующие свойства:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <PlatformToolset>v140_xp</PlatformToolset>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>

Итак, чтобы решить эту проблему, нам нужно установить набор инструментов v140_xp.Для этого откройте инструмент построения, перейдите на вкладку «Отдельные компоненты» и выберите VC++ 2015.3 v14.00 (v140) toolset for desktop:

enter image description here

После этого я могу построить проектуспешно:

enter image description here

Надеюсь, это поможет.

...