C++ CMake:无法运行 MSBuild 命令:MSBuild.exe
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/44478492/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
CMake: failed to run MSBuild command: MSBuild.exe
提问by A_Matar
I am trying to build FIATusing CMake
GUI on windows 10.
我正在尝试在 Windows 10 上使用GUI构建FIATCMake
。
CMake Error at CMakeLists.txt:3 (project):
Failed to run MSBuild command:
MSBuild.exe
to get the value of VCTargetsPath:
Configuring incomplete, errors occurred!
I configured CMake to use Visual Studio 15 2017 compiler.
我将 CMake 配置为使用 Visual Studio 15 2017 编译器。
How can I fix this?
我怎样才能解决这个问题?
If needed, here is the CMakeLists.txt file
如果需要,这里是 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)
As per your recommendation, I tried building from the Developer Command Prompt for VS2015
but still got the following error:
根据您的建议,我尝试从 构建,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
Here is my project's .vcxproj
file
这是我的项目.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>
回答by Yatin Khurana
What Worked for me was
对我有用的是
- File > Delete Cache
- Click Configure
- Selecting The right version of Visual Studio from the drop-down list, I.e. - the one that is installed on your machine. in my case, it was 'Visual Studio 15 2017' on windows 10.
- 文件 > 删除缓存
- 单击配置
- 从下拉列表中选择正确版本的 Visual Studio,即安装在您机器上的版本。就我而言,它是 Windows 10 上的“Visual Studio 15 2017”。
回答by Abhishek Jain
The error reads a missing Pathto MSBuild.exe
错误读取丢失的路径来MSBuild.exe
The possible solution to this is to install MSBuild.exe
可能的解决方案是安装MSBuild.exe
Scroll down to Other Tools and Frameworks, and install Build Tools For Visual Studio
向下滚动到其他工具和框架,并安装Visual Studio 的构建工具
回答by Maria V.
I had the same issue for what might be the same reason.
由于可能是相同的原因,我遇到了同样的问题。
I configured CMake to use Visual Studio 15 2017 compiler.
[...]
I tried building from the
Developer Command Prompt for VS2015
我将 CMake 配置为使用 Visual Studio 15 2017 编译器。
[...]
我尝试从
Developer Command Prompt for VS2015
If I'm reading this correctly, you have Visual Studio 14
(i.e. Visual Studio 2015
) installed and tried to configure CMake
with the Visual Studio 15
(i.e. Visual Studio 2017
) generator -- exactly the thing I did, unintentionally.
如果我没看错,您已经Visual Studio 14
(即Visual Studio 2015
)安装并尝试CMake
使用Visual Studio 15
(即Visual Studio 2017
)生成器进行配置——正是我无意中所做的事情。
Pay close attention to the version names. They can be confusing. Visual Studio 15
is not the same as Visual Studio 2015
. The program name may contain a four-digit year or a two-digit version number -- or both, as is the case with the CMake
GUI. See https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Historyand compare the listed product names and version numbers.
请密切注意版本名称。它们可能会令人困惑。Visual Studio 15
不一样Visual Studio 2015
。程序名称可能包含四位数的年份或两位数的版本号——或者两者都包含,就像CMake
GUI 一样。请参阅https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History并比较列出的产品名称和版本号。
回答by Stewart
Are you using the Visual Studio developer's console? I find that if I cmake --build .
from Window's build-in command line (cmd.exe), then my builds fail in similar ways. If I use the Visual Studio Developer's console instead, then things work better, though I need to add /p:Platform="Win32"
as a tag if I call msbuild
directly.. Specifically this is for tools which aren't found or incorrect paths. Using the Visual Studio command-line gives you a bunch of enviornment variables which are needed by MSBuild to compile your project.
您是否在使用 Visual Studio 开发人员的控制台?我发现如果我cmake --build .
使用 Window 的内置命令行 (cmd.exe),那么我的构建会以类似的方式失败。如果我改用 Visual Studio 开发人员的控制台,那么事情会更好,但/p:Platform="Win32"
如果我msbuild
直接调用,我需要将其添加为标签。具体来说,这是针对未找到或不正确路径的工具。使用 Visual Studio 命令行为您提供了一堆 MSBuild 编译项目所需的环境变量。
回答by oraz
As DeJaVo said, add the directory containing MSBuild.exe to the PATH in your system environment variables, then restart CMAke. Mine was in C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
正如 DeJaVo 所说,将包含 MSBuild.exe 的目录添加到系统环境变量中的 PATH 中,然后重新启动 CMAke。我的是在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
回答by gopi jayaraman
For visual studio 2019,
对于视觉工作室 2019,
System properties > environment variables > path, Add this one: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
系统属性>环境变量>路径,添加这一项:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
回答by ZHANG Zikai
I've hit this several times now. When you set environment variables like TEMP
and TMP
to a path that is not writable or doesn't exist, CMake will produce this error as it failed to run MSBUILD.exe while generating some files.
我已经打了好几次了。当您设置环境变量,如TEMP
与TMP
到不可写或不存在的路径,CMake的会,因为它无法运行MSBUILD.exe而产生一些文件产生此错误。
回答by dimon4eg
I fixed by correcting Visual Studio version:
我通过更正 Visual Studio 版本来修复:
cmake -G "Visual Studio 12 2013 Win64"
Available generators :
可用的发电机:
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".
回答by Hansa Tharuka
installhttp://www.microsoft.com/en-us/download/confirmation.aspx?id=40760MSbuild tools
安装http://www.microsoft.com/en-us/download/confirmation.aspx?id=40760MSbuild 工具
Run CMD as normal userType command MsBuild and veryfi the installation ** **Finished
以普通用户身份运行 CMD键入命令 MsBuild 并完成安装 ** ** 完成
回答by cham
I'm working in node and have a C++ library as a dependency that must be built regularly. In my case installing extra build tools, etc, did not help. I had to simply uninstall all Visual Studio tools (via the installer) and then only install Visual Studio Professional.
我在 node 中工作,并且有一个 C++ 库作为必须定期构建的依赖项。在我的情况下,安装额外的构建工具等并没有帮助。我必须简单地卸载所有 Visual Studio 工具(通过安装程序),然后只安装 Visual Studio Professional。