【问题标题】:CMake: failed to run MSBuild command: MSBuild.exeCMake:无法运行 MSBuild 命令:MSBuild.exe
【发布时间】:2017-11-12 16:38:37
【问题描述】:

我正在尝试在 Windows 10 上使用 CMake GUI 构建 FIAT

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>  

【问题讨论】:

  • 标题不正确,应该是Failed to **run** MSBuild command。您是否尝试过手动运行此命令 (MSBuild.exe)?
  • 已编辑。如何手动运行?
  • 在命令行中输入即可。这样你可以检查可执行文件是否真的存在并且可以在 PATH 中找到。
  • 您可能需要从 VS2017 的开发人员命令提示符启动 CMake。请参阅“开始”菜单的 Visual Studio 2017 部分中的条目。
  • 当我在链接中提供的 FIAT 项目上运行 CMake 3.8.2 时,创建了一个解决方案,我可以运行构建。所以请在您的 FIAT 项目的新副本中重新启动,然后启动 Visual Studio 15 2017 开发人员命令提示符并按顺序运行以下命令 cd FastImageAnnotationTool-mastermkdir buildcd buildcmake -G "Visual Studio 15 2017" ..cmake --build .

标签: c++ msbuild cmake cmake-gui


【解决方案1】:

我遇到了这个问题。在我卸载 Visual Studio 2019 时立即修复。在引用 this other linkthis link 中找到它

【讨论】:

    【解决方案2】:

    刚刚在 CMake 3.18 和 Visual Studio 2019 中遇到了此问题的变体:使用此生成器 ('Visual Studio 16 2019'),现在通过 cmake-A 参数指定平台。如果您像我一样为平台指定了不正确的值,则会遇到此错误。

    CMake 文档中列出了有效值,例如 Win64 应指定为 x64

    【讨论】:

      【解决方案3】:

      对于视觉工作室 2019,

      系统属性>环境变量>路径, 添加这个:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

      【讨论】:

        【解决方案4】:

        正如 DeJaVo 所说,将包含 MSBuild.exe 的目录添加到系统环境变量中的 PATH 中,然后重新启动 CMAke。我的在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

        【讨论】:

          【解决方案5】:

          我在 node 中工作,并且有一个 C++ 库作为必须定期构建的依赖项。就我而言,安装额外的构建工具等并没有帮助。我必须简单地卸载所有 Visual Studio 工具(通过安装程序),然后只安装 Visual Studio Professional。

          【讨论】:

            【解决方案6】:

            对我有用的是

            1. 文件 > 删除缓存
            2. 点击配置
            3. 从下拉列表中选择正确的 Visual Studio 版本,即- 安装在您的机器上的那个。就我而言,它是 Windows 10 上的“Visual Studio 15 2017”。

            【讨论】:

            • 生成的 .vcxproj 文件中 VCTargetsPath 的值是多少?
            • 对我不起作用。仍然遇到同样的问题。我将Visual Studio 15 2017、Visual Studio 15 2017 ARM和Visual Studio 15 2017 Win64并列,无论我选择什么都会出错
            【解决方案7】:

            安装 http://www.microsoft.com/en-us/download/confirmation.aspx?id=40760 MSbuild 工具

            以普通用户身份运行 CMD 输入命令 MsBuild 并安装 ** **完成

            【讨论】:

              【解决方案8】:

              我通过更正 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".   
              

              【讨论】:

                【解决方案9】:

                出于同样的原因,我遇到了同样的问题。

                我将 CMake 配置为使用 Visual Studio 15 2017 编译器。

                [...]

                我尝试从 Developer Command Prompt for VS2015 构建

                如果我没看错,你已经安装了Visual Studio 14(即Visual Studio 2015)并尝试使用Visual Studio 15(即Visual Studio 2017)生成器配置CMake——这正是我所做的,无意中。

                密切注意版本名称。他们可能会令人困惑。 Visual Studio 15Visual Studio 2015 不同。程序名称可能包含四位数的年份或两位数的版本号——或两者兼有,就像CMake GUI 的情况一样。请参阅https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History 并比较列出的产品名称和版本号。

                【讨论】:

                  【解决方案10】:

                  我已经打了好几次了。当您将TEMPTMP 等环境变量设置为不可写或不存在的路径时,CMake 将产生此错误,因为它在生成某些文件时无法运行 MSBUILD.exe。

                  【讨论】:

                    【解决方案11】:

                    错误读取 缺少路径MSBuild.exe

                    可能的解决方案是安装MSBuild.exe

                    向下滚动到Other Tools and Frameworks,然后安装Build Tools For Visual Studio

                    【讨论】:

                    • 我卸载了 VS,当我重新安装它时,我不得不像这样手动重新安装 MSBuild。谢谢!
                    • 只需将msbuild路径添加到环境变量路径
                    【解决方案12】:

                    您使用的是 Visual Studio 开发者控制台吗?我发现如果我从 Window 的内置命令行 (cmd.exe) 中cmake --build .,那么我的构建会以类似的方式失败。如果我改用 Visual Studio 开发人员的控制台,那么事情会更好,但如果我直接调用 msbuild,我需要将 /p:Platform="Win32" 添加为标签。特别是针对未找到或路径不正确的工具。使用 Visual Studio 命令行为您提供了 MSBuild 编译项目所需的一堆环境变量。

                    【讨论】:

                    • 我试了还是报错,请检查上面编辑过的问题
                    • 查看了您的更新。看起来 Visual Studio 在解析 VCPROJ 文件时遇到问题。
                    • 好的,还有一个提示。当您使用 cmake 生成 Visual Studio 文件时,应该有一个 .sln 文件。在.sln 文件上使用MSBuild,而不是.vcxproj
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多