J'essaie de construire FIAT en utilisant l'interface graphique CMake
sous 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!
J'ai configuré CMake pour utiliser le compilateur Visual Studio 15 2017.
Comment puis-je réparer cela?
Si nécessaire, voici le fichier 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)
Selon votre recommandation, j'ai essayé de construire à partir du Developer Command Prompt for VS2015
mais j'ai quand même eu l'erreur suivante:
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
Voici le fichier .vcxproj
de mon projet
<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>
Ce qui a fonctionné pour moi était
J'espère que cela t'aides. P.s. - Je suis un noob chez StackOverflow, alors excuse-moi si je me trompe.
L'erreur lit un chemin d'accès manquant à MSBuild.exe
La solution possible est d'installer MSBuild.exe
Faites défiler la liste jusqu'à Autres outils et cadres et installez Construire des outils pour Visual Studio
Utilisez-vous la console du développeur Visual Studio? Je constate que si je cmake --build .
à partir de la ligne de commande intégrée de Windows (cmd.exe), mes versions échouent de la même manière. Si j'utilise plutôt la console du développeur Visual Studio, les choses fonctionnent mieux, même si je dois ajouter /p:Platform="Win32"
en tant que balise si j'appelle directement msbuild
. Spécifiquement, cela concerne les outils qui ne sont pas trouvés ou des chemins incorrects. L’utilisation de la ligne de commande Visual Studio vous donne un tas de variables d’environnement nécessaires à MSBuild pour compiler votre projet.
J'ai eu le même problème pour ce qui pourrait être la même raison.
J'ai configuré CMake pour utiliser le compilateur Visual Studio 15 2017.
[...]
J'ai essayé de construire à partir du
Developer Command Prompt for VS2015
Si je lis ceci correctement, vous avez installé Visual Studio 14
(c'est-à-dire Visual Studio 2015
) et avez essayé de configurer CMake
avec le générateur Visual Studio 15
(c'est-à-dire Visual Studio 2017
) - exactement ce que j'ai fait, sans le vouloir.
Portez une attention particulière aux noms de version. Ils peuvent être déroutants. Visual Studio 15
n'est pas la même chose que Visual Studio 2015
. Le nom du programme peut contenir une année à quatre chiffres ou un numéro de version à deux chiffres, ou les deux, comme dans le cas de l'interface graphique CMake
. Voir https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History et comparez les noms de produits et les numéros de version répertoriés.
Je l'ai frappé plusieurs fois maintenant. Lorsque vous définissez des variables d'environnement telles que TEMP
et TMP
sur un chemin qui n'est pas accessible en écriture ou n'existe pas, CMake générera cette erreur car l'exécution de MSBUILD.exe a échoué lors de la génération de certains fichiers.
J'ai corrigé en corrigeant la version de Visual Studio:
cmake -G "Visual Studio 12 2013 Win64"
Générateurs disponibles:
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".
installhttp://www.Microsoft.com/en-us/download/confirmation.aspx?id=40760 Outils MSbuild
Exécuter CMD en tant qu'utilisateur normalTapez la commande MsBuild et veryfi l'installation ** ** Terminé