CMake: не удалось запустить команду MSBuild: MSBuild.exe

Я пытаюсь создать FIAT, используя CMake GUI в Windows 10.

CMake Error at CMakeLists.txt:3 (project):
  Failed to run MSBuild command:

    MSBuild.exe

  to get the value of VCTargetsPath:
Configuring incomplete, errors occurred!

Я настроил CMake для использования компилятора Visual Studio 15 2017.

Как я могу это исправить?

Если нужно, вот файл CMakeLists.txt

cmake_minimum_required(VERSION 3.2)
include(CheckCXXCompilerFlag)
project(FIAT CXX)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

if(CHECK_CXX_COMPILER_USED1)
# Using Visual Studio C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "MSVCx")
# Using Intel C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "Intelx")
else(CHECK_CXX_COMPILER_USED1)
    # GCC or Clang
    # At least C++11
    CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
    CHECK_CXX_COMPILER_FLAG("-std=c++1z" COMPILER_SUPPORTS_CXX1Z)
    CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
    CHECK_CXX_COMPILER_FLAG("-std=c++1y" COMPILER_SUPPORTS_CXX1Y)
    CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
    if(COMPILER_SUPPORTS_CXX17)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
    elseif(COMPILER_SUPPORTS_CXX1Z)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z")
    elseif(COMPILER_SUPPORTS_CXX14)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
    elseif(COMPILER_SUPPORTS_CXX1Y)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
    elseif(COMPILER_SUPPORTS_CXX11)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    else(COMPILER_SUPPORTS_CXX17)
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
    endif(COMPILER_SUPPORTS_CXX17)

    if(CHECK_CXX_COMPILER_USED2)
    elseif("${CMAKE_CXX_COMPILER_ID}x" MATCHES "Clangx")
        # Using Clang
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-global-constructors")
    elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "GNUx")
        # Using GCC
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
    endif(CHECK_CXX_COMPILER_USED2)
endif(CHECK_CXX_COMPILER_USED1)

#OpenCV
FIND_PACKAGE(OpenCV REQUIRED core imgproc highgui imgcodecs)
if(OpenCV_Found)
    INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIR})
endif(OpenCV_Found)

#Boost
FIND_PACKAGE(Boost REQUIRED program_options filesystem)
if(Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
else(Boost_FOUND)
    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/local/boost_1_60_0/")
    set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/local/boost_1_60_0/lib64-msvc-14.0")
    Find_PACKAGE(Boost)
    if(Boost_FOUND)
        INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    endif(Boost_FOUND)
endif(Boost_FOUND)

set(Boost_USE_STATIC_LIBS        OFF)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME     OFF)
set(BOOST_ALL_DYN_LINK           OFF)

# Annotation Lib
file(GLOB_RECURSE FIAT_LIB_HEADERS
    "${FIAT_SOURCE_DIR}/src/image/*.h" "${FIAT_SOURCE_DIR}/src/annotation/*.h" "${FIAT_SOURCE_DIR}/src/tools/*.h"
)

file(GLOB_RECURSE FIAT_LIB_SRC
    "${FIAT_SOURCE_DIR}/src/image/Image.cpp" "${FIAT_SOURCE_DIR}/src/annotation/*.cpp" "${FIAT_SOURCE_DIR}/src/tools/*.cpp"
)

add_library(utilities ${INCLUDE_DIRECTORIES} ${FIAT_LIB_HEADERS} ${FIAT_LIB_SRC})
target_link_libraries (utilities ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} )

if(CHECK_CXX_COMPILER_USED_UTILITIES)

elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "MSVCx")
  # using Visual Studio C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "Intelx")
  # using Intel C++
else()
  # GCC or Clang
    target_link_libraries (utilities m )
endif(CHECK_CXX_COMPILER_USED_UTILITIES)

# Annotate
file(GLOB_RECURSE FIAT_ANNOTATE_HEADERS
)

file(GLOB_RECURSE FIAT_ANNOTATE_SRC
    "${FIAT_SOURCE_DIR}/src/app/annotate.cpp"
)

add_executable(annotate ${INCLUDE_DIRECTORIES} ${FIAT_LIB_HEADERS} ${FIAT_ANNOTATE_HEADERS} ${FIAT_ANNOTATE_SRC})
target_link_libraries(annotate utilities ${Boost_LIBRARIES} ${OpenCV_LIBRARIES})


if(CHECK_CXX_COMPILER_USED_ANNOTATE)
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "MSVCx")
  # using Visual Studio C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "Intelx")
  # using Intel C++
else()
  # GCC or Clang
    target_link_libraries (annotate m)
endif(CHECK_CXX_COMPILER_USED_ANNOTATE)

По вашей рекомендации я попытался собрать Developer Command Prompt for VS2015, но все равно получил следующую ошибку:

msbuild FIAT.vcxproj /p:configuration=debug
Microsoft (R) Build Engine version 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 6/12/2017 5:16:26 AM.
Project "E:\Work\FastImageAnnotationTool-master\FIAT.vcxproj" on node 1 (default targets).
E:\Work\FastImageAnnotationTool-master\FIAT.vcxproj(1,1): error MSB4067: The element <#text> beneat
h element <Project> is unrecognized.
Done Building Project "E:\Work\FastImageAnnotationTool-master\FIAT.vcxproj" (default targets) -- FA
ILED.


Build FAILED.

"E:\Work\FastImageAnnotationTool-master\FIAT.vcxproj" (default target) (1) ->
  E:\Work\FastImageAnnotationTool-master\FIAT.vcxproj(1,1): error MSB4067: The element <#text> bene
ath element <Project> is unrecognized.

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.03

Вот .vcxproj файл моего проекта

<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <ItemGroup>  
    <ProjectConfiguration Include="Debug|Win32">  
      <Configuration>Debug</Configuration>  
      <Platform>Win32</Platform>  
    </ProjectConfiguration>  
    <ProjectConfiguration Include="Release|Win32">  
      <Configuration>Release</Configuration>  
      <Platform>Win32</Platform>  
    </ProjectConfiguration>  
  </ItemGroup>  
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />  
  <PropertyGroup>  
    <ConfigurationType>Application</ConfigurationType>  
    <PlatformToolset>v120</PlatformToolset>  
  </PropertyGroup>  
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />  
  Annotation.cpp Annotations.cpp app/annotate.cpp - image/Image.cpp test/image-test.cpp - tools/tools.cpp

  <ItemGroup>  
    <ClInclude Include="/src/annotation/Annotation.cpp" />  
  </ItemGroup>  
  <ItemGroup>  
    <ClInclude Include="/src/annotation/Annotation.h" />  
  </ItemGroup>  

  <ItemGroup>  
    <ClInclude Include="/src/annotation/Annotations.cpp" />  
  </ItemGroup>  
  <ItemGroup>  
    <ClInclude Include="/src/annotation/Annotation.h" />  
  </ItemGroup>  

  <ItemGroup>  
    <ClInclude Include="/src/app/annotate.cpp" />  
  </ItemGroup>  

  <ItemGroup>  
    <ClInclude Include="/src/image/Image.cpp" />  
  </ItemGroup>  
  <ItemGroup>  
    <ClInclude Include="/src/image/Image.h" />  
  </ItemGroup>

  <ItemGroup>  
    <ClInclude Include="/src/test/image-test.cpp" />  
  </ItemGroup> 

  <ItemGroup>  
    <ClInclude Include="/src/tools/tools.cpp" />  
  </ItemGroup>  
  <ItemGroup>  
    <ClInclude Include="/src/tools/tools.h" />  
  </ItemGroup> 

  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />  
</Project>  

person A_Matar    schedule 10.06.2017    source источник
comment
Название неверное, должно быть Failed to **run** MSBuild command. Вы пробовали запустить эту команду (MSBuild.exe) вручную?   -  person Tsyvarev    schedule 11.06.2017
comment
отредактировал. Как мне запустить его вручную?   -  person A_Matar    schedule 11.06.2017
comment
Просто введите его в командной строке. Таким образом вы можете проверить, существует ли исполняемый файл на самом деле и его можно найти в PATH.   -  person Tsyvarev    schedule 11.06.2017
comment
Возможно, вам потребуется запустить CMake из командной строки разработчика для VS2017. См. Запись в разделе Visual Studio 2017 в меню «Пуск».   -  person vre    schedule 11.06.2017
comment
Когда я запустил CMake 3.8.2 в проекте FIAT, который вы указали в ссылке, решение было создано, и я смог запустить сборку. Поэтому, пожалуйста, перезапустите новую копию вашего проекта FIAT, затем запустите командную строку разработчика Visual Studio 15 2017 и выполните следующие команды cd FastImageAnnotationTool-master, mkdir build, cd build, cmake -G "Visual Studio 15 2017" .., cmake --build . в указанном порядке.   -  person vre    schedule 12.06.2017
comment
Не создавая FIAT, но в своем проекте я использовал командную строку разработчика Visual Studio 15 2017, а затем сделал cmake -G "Visual Studio 15 2017" .. ту же ошибку Не удалось запустить команду MSBuild: MSBuild.exe, чтобы получить значение VCTargetsPath: появляется   -  person pterodragon    schedule 08.07.2017
comment
Я начал испытывать эту проблему сегодня, хотя никогда раньше с ней не сталкивался. Единственное отличие состоит в том, что я недавно установил VS 2019.   -  person legalize    schedule 05.04.2019


Ответы (12)


Ошибка считывает отсутствующий путь к MSBuild.exe.

Возможное решение - установить MSBuild.exe.

Прокрутите вниз до Другие инструменты и платформы и установите Инструменты сборки для Visual Studio.

person Abhishek Jain    schedule 13.11.2017
comment
Я удалил VS, и когда я переустановил его, мне пришлось вручную повторно установить MSBuild, как это. Спасибо! - person Nitro; 13.12.2017
comment
Просто добавьте путь msbuild к пути переменных среды - person DeJaVo; 05.02.2018

Что сработало для меня, было

  1. Файл> Удалить кеш
  2. Нажмите Настроить.
  3. Выбор правильной версии Visual Studio из раскрывающегося списка, т.е. - тот, что установлен на вашей машине. в моем случае это была Visual Studio 15 2017 в Windows 10.
person Yatin Khurana    schedule 30.12.2017
comment
Какое значение имеет VCTargetsPath в созданном файле .vcxproj? - person Ted; 13.06.2019
comment
У меня не получилось. По-прежнему возникает та же проблема. Я связал Visual Studio 15 2017, Visual Studio 15 2017 ARM и Visual Studio 15 2017 Win64, получая ошибку независимо от того, что я выберу - person KulaGGin; 07.02.2020

Для Visual Studio 2019,

Свойства системы> переменные среды> путь, добавьте это: C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ MSBuild \ Current \ Bin

person gopi jayaraman    schedule 22.01.2020

У меня была такая же проблема, может быть, по той же причине.

Я настроил CMake для использования компилятора Visual Studio 15 2017.

[...]

Я пробовал строить из Developer Command Prompt for VS2015

Если я правильно это понимаю, у вас установлен Visual Studio 14 (т.е. Visual Studio 2015) и вы пытаетесь настроить CMake с генератором Visual Studio 15 (т.е. Visual Studio 2017) - именно то, что я сделал, непреднамеренно.

Обратите особое внимание на названия версий. Они могут сбивать с толку. Visual Studio 15 - это не то же самое, что Visual Studio 2015. Название программы может содержать четырехзначный год или двузначный номер версии - или и то, и другое, как в случае с CMake GUI. См. https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History и сравните перечисленные названия продуктов и номера версий.

person Maria V.    schedule 19.01.2018

Как сказал DeJaVo, добавьте каталог, содержащий MSBuild.exe, в PATH в переменных вашей системной среды, затем перезапустите CMAke. Моя была в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

person oraz    schedule 07.01.2020

Вы используете консоль разработчика Visual Studio? Я обнаружил, что если я cmake --build . из встроенной командной строки Windows (cmd.exe), мои сборки терпят неудачу аналогичным образом. Если вместо этого я использую консоль разработчика Visual Studio, все будет работать лучше, хотя мне нужно добавить /p:Platform="Win32" в качестве тега, если я вызываю msbuild напрямую. В частности, это для инструментов, которые не найдены, или для неправильных путей. Использование командной строки Visual Studio дает вам набор переменных среды, которые необходимы MSBuild для компиляции вашего проекта.

person Stewart    schedule 11.06.2017
comment
Я пробовал, но все равно получаю ошибку, пожалуйста, проверьте отредактированный вопрос выше - person A_Matar; 12.06.2017
comment
Взглянул на ваше обновление. Похоже, у Visual Studio возникли проблемы с синтаксическим анализом файла VCPROJ. - person Stewart; 13.06.2017
comment
Хорошо, еще один совет. Когда вы используете cmake для создания файлов Visual Studio, должен быть файл .sln. Используйте MSBuild для .sln файла вместо .vcxproj. - person Stewart; 13.06.2017

Я ударил это несколько раз. Когда вы устанавливаете переменные среды, такие как TEMP и TMP, на путь, который не доступен для записи или не существует, CMake выдаст эту ошибку, поскольку не удалось запустить MSBUILD.exe при создании некоторых файлов.

person ZHANG Zikai    schedule 08.03.2018

Только что столкнулся с вариантом этой проблемы с CMake 3.18 и Visual Studio 2019: с этим генератором ('Visual Studio 16 2019') платформа теперь указывается через аргумент -A для cmake. Если вы укажете неверное значение для платформы, как я, вы столкнетесь с этой ошибкой.

Допустимые значения перечислены в документации CMake, например Win64 следует указать как x64.

person James Turner    schedule 10.09.2020

Я исправил, исправив версию Visual Studio:

cmake -G "Visual Studio 12 2013 Win64"

Доступные генераторы:

  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. 
                                 Optional [arch] can be "Win64" or "IA64".   
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files. 
                                 Optional [arch] can be "Win64" or "IA64".   
person Dmytro    schedule 23.11.2018

установить http://www.microsoft.com/en-us/download/confirmation.aspx?id=40760 Инструменты MSbuild

Запустите CMD от имени обычного пользователя Введите команду MsBuild и завершите установку ** ** Завершена

person Hansa Tharuka    schedule 03.02.2019

Я работаю в node и имею библиотеку C ++ в качестве зависимости, которую необходимо регулярно создавать. В моем случае установка дополнительных инструментов сборки и т. Д. Не помогла. Мне пришлось просто удалить все инструменты Visual Studio (через установщик), а затем установить только Visual Studio Professional.

person cham    schedule 25.11.2019

У меня была эта проблема. Исправлено мгновенно, когда я удалил Visual Studio 2019. Нашел его в эту ссылку, которая ссылается на эта другая ссылка

person Sxubach    schedule 08.02.2021