Для проекта, созданного CMake для VS2017, требуется установка VS2010

#visual-studio-2010 #cmake #msbuild #visual-studio-2017

#visual-studio-2010 #cmake #msbuild #visual-studio-2017

Вопрос:

У меня есть проект CMake, созданный для VS2017. Когда я пытаюсь создать конфигурацию выпуска из командной строки, используя cmake.exe --build "buildrelease_2017" --target pemd5 ее, происходит сбой с ошибкой:

 C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEVCVCTargetsMicrosoft.Cpp.Platform.targets(65,5): error MSB8020: The
 build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, please install Visual Studio
 2010 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, a
nd then selecting "Retarget solution". [D:devsyscorebuildrelease_2017comlibcomlib.vcxproj]
 

Та же команда работает безупречно для конфигурации отладки. Что еще более странно, так это то, что если я загружаю сгенерированное решение с помощью VS2017 IDE, оно строится правильно.
Я также попытался создать файл .sln с помощью MSBuild.exe использование msbuild.exe buildrelease_2017SysCore.sln . Хотя результаты немного лучше, я все еще получаю похожие ошибки:

 Microsoft (R) Build Engine version 15.9.21 g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 1/7/2021 10:07:46 AM.
Project "D:devsyscorebuildrelease_2017SysCore.sln" on node 1 (default targets).
D:devsyscorebuildrelease_2017SysCore.sln.metaproj : error MSB4126: The specified solution configuration "Release|x86" is invalid. Please spec
ify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platfo
rm="Any CPU") or leave those properties blank to use the default solution configuration. [D:devsyscorebuildrelease_2017SysCore.sln]
Done Building Project "D:devsyscorebuildrelease_2017SysCore.sln" (default targets) -- FAILED.


Build FAILED.

"D:devsyscorebuildrelease_2017SysCore.sln" (default target) (1) ->
(ValidateSolutionConfiguration target) ->
  D:devsyscorebuildrelease_2017SysCore.sln.metaproj : error MSB4126: The specified solution configuration "Release|x86" is invalid. Please sp
ecify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Plat
form="Any CPU") or leave those properties blank to use the default solution configuration. [D:devsyscorebuildrelease_2017SysCore.sln]

    0 Warning(s)
    1 Error(s)
 

Только если я также укажу платформу, сборка завершится успешно ( msbuild.exe buildrelease_2017SysCore.sln -p:Platform=Win32 ).

Ни один из моих CMakeLists.txt скрипты в исходном каталоге имеют условные разделы CMAKE_CONFIGURATION_TYPES. Как Debug, так и Release были сгенерированы VS2017 с помощью команды:

 C:PROGRAM FILES (X86)MICROSOFT VISUAL STUDIO2017PROFESSIONALCOMMON7IDECOMMONEXTENSIONSMICROSOFTCMAKECMakebincmake.exe  -G "Visual Studio 15 2017" -DCMAKE_INSTALL_PREFIX:PATH="D:devsyscoreinstallrelease_2017"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/HostX86/x86/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/HostX86/x86/cl.exe"  -DCMAKE_CONFIGURATION_TYPES="Release" "D:devsyscore"
 

и

 C:PROGRAM FILES (X86)MICROSOFT VISUAL STUDIO2017PROFESSIONALCOMMON7IDECOMMONEXTENSIONSMICROSOFTCMAKECMakebincmake.exe  -G "Visual Studio 15 2017" -DCMAKE_INSTALL_PREFIX:PATH="D:devsyscoreinstalldebug_2017"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/HostX86/x86/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/HostX86/x86/cl.exe"  -DCMAKE_CONFIGURATION_TYPES="Debug" "D:devsyscore"
1> Working directory: D:devsyscorebuilddebug_2017
 

Мой CMakeSettings.json выглядит так:

 {
    "configurations": [
        {
            "name": "debug_2017",
            "generator": "Visual Studio 15 2017",
            "configurationType": "Debug",
            "inheritEnvironments": [ "msvc_x86" ],
            "buildRoot": "${workspaceRoot}\build\${name}",
            "installRoot": "${workspaceRoot}\install\${name}",
            "cmakeCommandArgs": "",
            "buildCommandArgs": "-v:n -m:8",
            "ctestCommandArgs": "",
            "variables": []
        },
      {
        "name": "release_2017",
        "generator": "Visual Studio 15 2017",
        "configurationType": "Release",
        "inheritEnvironments": [ "msvc_x86" ],
        "buildRoot": "${workspaceRoot}\build\${name}",
        "installRoot": "${workspaceRoot}\install\${name}",
        "cmakeCommandArgs": "",
        "buildCommandArgs": "-v:d -m:8",
        "ctestCommandArgs": "",
        "variables": []
      },
....
 

Есть предложения???

Заранее спасибо.

Ответ №1:

Похоже на ошибку в CMake. Единственный способ обойти это, который я нашел до сих пор, — добавить явную конфигурацию и платформу для MSBuild.exe на cmake.exe командная строка (например cmake.exe --build ..... -- -p:Configuration=Debug -p:Platform=Win32 )