Ich habe gerade das Windows 10 Creators Update (Version 10.0.15063) installiert.
Ich habe mehrere Versionen von Visual Studio installiert (2012, 2013, 2015 und 2017). Ich habe VS 2017 erst vor ein paar Wochen installiert.
CMake (Version 3.8.1) findet den C/C++ - Compiler nicht mehr, wenn er in einer "VS2015 x64 Native-Eingabeaufforderung" ausgeführt wird (wenn funktioniert, wenn er in einer VS 2017-Eingabeaufforderung ausgeführt wird).
Inhalt von CMakeLists.txt
:
project (test)
add_executable (test test.cpp)
(Der Inhalt von test.cpp
ist irrelevant.)
CMake-Aufruf in einer nativen VS2015 x64-Eingabeaufforderung:
> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..
CMake-Ausgabe:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:1 (project):
No CMAKE_C_COMPILER could be found.
CMake Error at CMakeLists.txt:1 (project):
No CMAKE_CXX_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeOutput.log".
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeError.log".
Der Grund des Fehlers ist klar, wenn Sie CMakeFiles/CMakeError.log
betrachten:
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_AMD64\CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
CMakeCCompilerId.c
Link:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_AMD64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib Shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X64 Debug\CMakeCCompilerId.obj
LINK : fatal error LNK1158: cannot run 'rc.exe' [D:\dev\cmaketest\build\CMakeFiles\3.8.1\CompilerIdC\CompilerIdC.vcxproj]
rc.exe
(Resource Compiler) wurde nicht gefunden. In der gleichen VS 2015-Befehlszeile:
> where rc.exe
INFO: Could not find files for the given pattern(s).
Während es ist in einer VS 2013-Eingabeaufforderung gefunden:
> where rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x64\rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe
und eine VS 2017-Eingabeaufforderung:
> where rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
Überprüfen des Inhalts der Umgebungsvariablen PATH
in verschiedenen Eingabeaufforderungen für VS-Befehle:
In einer VS 2013-Eingabeaufforderung enthält PATH
C:\Program Files (x86)\Windows Kits\8.1\bin\x64
In einer VS 2017-Eingabeaufforderung enthält PATH
C:\Program Files (x86)\Windows Kits\10\bin\x64
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
In einer VS 2015-Befehlseingabeaufforderung enthält PATH
jedoch nur
C:\Program Files (x86)\Windows Kits\10\bin\x64
welches nicht rc.exe
enthält.
Ist dies ein bekanntes Problem oder ist es spezifisch für mein System?
Was könnte das Windows 10 Creators Update möglicherweise im System installieren, deinstallieren oder ändern (möglicherweise etwas im Zusammenhang mit Windows SDKs), das dieses Problem auslösen könnte?
Was ist ein sauberer Weg, um dieses Problem zu lösen?
Bearbeiten: Installierte VS 2017-Komponenten:
Ich habe einige Zeit damit verbracht, dies auf drei Computern zu betrachten, auf denen Win10 Creators Edition und VS2010, VS2013, VS2015 und VS2017 installiert sind, wo es auf zwei Computern funktioniert und auf dem dritten Computer ausfällt. Alle hatten VS2015 Update 3 und alle sollten mit den gleichen Optionen installiert worden sein.
Ausführen der folgenden Batchdatei
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\AMD64\vcvars64.bat
sollte die richtige Umgebung für die VS2015 x64-Umgebung einrichten. Das sollte hinzufügen
C:\Program Files (x86)\Windows Kits\10\bin\x64
zum PFAD. Hier sollte rc.exe sein. Auf meinem fehlerhaften Rechner fehlte jedoch rc.exe hier, aber er war in vorhanden
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
Ich ging zurück und hatte das Gefühl, es handele sich um ein Setup-Problem. Ich habe das Setup für VS2015 Update 3 erneut ausgeführt und ihm gesagt, es hinzuzufügen
Windows und Webentwicklung -> Universal Windows App-Entwicklungstools -> Tools (1.4.1) und Windows 10 SDK (10.0.14393)
dadurch wurden rc.exe und verwandte Dateien in angezeigt
C:\Program Files (x86)\Windows Kits\10\bin\x64
rc -v on ausführen
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
und
C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
gab die gleiche Versionsnummer 10.0.10011.16384
Nicht sicher, warum rc.exe in der ursprünglichen Installation fehlte, aber die Installation erneut auszuführen und das andere SDK hinzuzufügen, behebte es für mich. Es sieht aus wie
C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
sollte die Standardeinstellung rc.exe sein, wurde aber bei einer vorherigen Installation nicht eingerichtet.
Es ist definitiv nicht nur du. Ich habe VS2017 gestern installiert, und dies scheint an meinem Ende das gleiche Problem hervorgerufen zu haben. Ich habe keine gute Lösung (dies sollte an Microsoft als Fehler gemeldet werden), aber ich habe eine hacky Problemumgehung.
Ich konnte rc.exe und rc.dll von kopieren
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
to
C:\Program Files (x86)\Windows Kits\10\bin\x86
Das hat das Problem für mich gelöst. Meine Vermutung ist, dass es sich um einen Registrierungsschlüssel handelt, der überschrieben wird, aber ich habe mich noch nicht genug damit beschäftigt, um sicher zu sein.
Das gleiche Problem ist mit Windows 10 15063.608 (Windows SDK 10.0.15063.0) aufgetreten. Die Lösung, die für mich funktioniert, ist die Erstellung von Hardlinks für die Windows 10-Kit-Binärdateien x64 und x86 (siehe unten).
mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x86" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86"
mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x64" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64"
(Bevor Sie diese Befehle ausführen, benennen Sie einfach vorhandene Windows Kits\10\bin\x64
- und Windows Kits\10\bin\x86
-Ordner um - es sieht so aus, als würden sie nicht verwendet.
Aus irgendeinem Grund funktionierten das integrierte Tools (1.4.1) und das Windows 10 SDK (10.0.14393) -Installationsprogramm für mich nicht:
C:\Program Files (x86)\Windows Kits\10\bin\x86
wurde während der Installation bestückt (Erfolg!)-2147023293
/0x80048646
zurückgegeben.Das "Windows 10 SDK (Ver. 10.0.14393.795)" - Installationsprogramm aus dem Windows SDK und Emulator-Archiv hat zwar funktioniert: C:\Program Files (x86)\Windows Kits\10\bin\x86
ruft und bleibt gefüllt, einschließlich rc.exe
.
Windows 7 x64, Visual Studio Professional 2015 Update 3.
Die Angabe von CMAKE_SYSTEM_VERSION=8.1
hat das Problem für mich gelöst.
Für alle, die sich hier festsetzen, ist ein besonderes Problem:
Wenn Sie das oben tun,
es scheint, dass ein Fehler oder ein anderes Verhalten mit der gesamten Suite von Windows/VS-Installationsprogrammen vorliegt.
Es gibt im Grunde vier Probleme, die MSFT beheben muss (a). Manchmal wird rc.exe nicht installiert. (B) rc.exe wird nicht installiert, wenn "nur" nach dem C++ - Material gefragt wird Für alles (c) scheint die Deinstallationsinstallations-Pipeline auf verschiedene Weise durcheinander zu sein (d), selbst wenn sie die rc.exe zufällig für Sie installiert, den Pfad vergisst oder verschmutzt.
: /
Lange langweilige Geschichte kurz, Lösungen scheinen eine oder mehrere von zu enthalten
. . . . . .
[*] es kann gut mit VS 2017 kommen, und vergessen Sie nicht, dass VS 2017 ärgerlich mit etwas anderem, Unity usw. installiert wird.
Führen Sie die VS2015-Eingabeaufforderung aus:
> where rc
> C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
> C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe
Es scheint, dass vs2017 default das neueste SDK installiert und alte Versionen überschreibt.
Ähnliches Problem mit VS2017 Community 15.4.5 mit Windows Sdk Version 10.0.16299.0, jedoch nur für Builds über TeamCity; Builds von VS aus funktionieren gut und das Erstellen mit MSBuild beim Starten eines VS-Entwicklerbefehls Prompt. Dies beantwortet die Frage des OP nicht genau, ist aber so ähnlich und dies ist einer der ersten Suchtreffer. Ich werde es hier hinzufügen.
Eine Lösung gefunden, bei der not die Installation in keiner Weise geändert werden muss (kein Verknüpfen/Kopieren, daher weniger fehleranfällig und leicht zu automatisieren):
setzen Sie die Umgebungsvariable VisualStudioVersion
auf 15.0
.
Sie können dies global mit der Standard-Windows-GUI tun (Beispiel für Windows 10 hier ), aber ich würde eher davon abraten, da es andere Versionen von VS stören könnte einfach automatisiert oder in Ihren Build-Code eingecheckt und somit schwieriger auf verschiedenen Maschinen zu reproduzieren. Eine bessere Alternative ist, dies in der Befehlszeile festzulegen, in der der Build ausgeführt wird (cmd: set VisualStudioVersion=15.0
PS: $env:VisualStudioVersion = '15.0'
in TeamCity: add env.VisualStudioVersion
Parameter). Eine andere Alternative besteht darin, dieses Verzeichnis als Eigenschaft an MSBuild zu übergeben (übergeben Sie /p:VisualStudioVersion=15.0
oder fügen Sie in teamCity system.VisualStudioVersion
hinzu).
Öffnen Sie "C:\Programme (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" in einem Texteditor im Administratormodus, und ändern Sie die Zeile .__
@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%PATH%
zu
@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%WindowsSdkDir%bin\%WindowsSDKVersion%x86;%PATH%
Ich hatte genau das gleiche Problem. Mehrere Visual Studio-Versionen, einschließlich 2015 und 2017. Meine Lösung bestand darin, den Befehl cmake aus dem 2017er Entwickler-Befehl Prompt auszuführen und die Visual Studio-Version 2015 mit folgendem Befehl anzugeben:
cmake -G "Visual Studio 14 2015" ..
führen Sie den folgenden Befehl auf dem nativen 64/86 Visual Studio-Befehl aus. Aufforderung zum Festlegen der korrekten Version Für vs2015 -% comspec%/k "C:\Programme (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" AMD64 8.1% comspec %/k "C:\Programme (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 8.1
führen Sie den folgenden Befehl in der nativen 64/86 Visual Studio-Eingabeaufforderung aus, um die richtige Version für vs2013 -% comspec%/k "C:\Programme (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" festzulegen. AMD64 7.1% comspec%/k "C:\Programme (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86 7.1
Dadurch wird der richtige Pfad festgelegt und ohne Probleme ausgeführt. Ich habe dies auf WIN10 mit installiertem VS2013, VS2015, VS2017 getestet.