そこで、昨日Visual Studio 2017をインストールしました。 VS 2017をサポートするCMake 3.7.2もインストールしました。
私のVSのインストールには、Game development with C++
ワークフロー+その他のコンポーネントがいくつかあります。
また、CMakeを追加しました(ただし、VSakeを生成するためにスタンドアロンツールとしてCMakeを使用しているため、それを必要とさえ考えていません)およびMSBuild(追加する前でもmsbuild.exe
がありました)そのコンポーネント-したがって、その追加コンポーネントが正確に何を行うかはわかりません)。
VS 2015では、通常のコマンドプロンプトからcmake .
を実行するだけで解決策を求めることができました。
VS 2017では、ワークフローが変わります-私は Microsoftからのこの投稿 を読みました。
だから私は次のことを試しました:
Developer Command Prompt for VS 2017
を開き、そこからcmake . -G "NMake Makefiles"
を実行しました。次に、cmake --build .
を実行して、すべてを適切にコンパイルしました。プロンプトで次のことを試みたとき:cmake . -G "Visual Studio 15 2017 Win64"
ソリューションの作成を強制するために、次のエラーが発生しました。
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
No CMAKE_C_COMPILER could be found.
CMake Error at CMakeLists.txt:3 (project):
No CMAKE_CXX_COMPILER could be found.
-- Configuring incomplete, errors occurred!
また、 vswhere.exe を使用して環境をセットアップし、次のようにvcvarsall.bat
を実行しました。
「C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat」AMD64
繰り返しますが、NMakeファイルしか生成できず、ソリューションは生成できませんでした。
それでは、どうすれば解決策を得ることができますか?
そして、cl.exe
がVersion 19.10.25017
にあるときにVC\Tools\MSVC\14.10.25017\bin
を報告するのはなぜですか?
コメントを回答に変える
エラー-- The CXX compiler identification is unknown - No CMAKE_CXX_COMPILER could be found.
は、基本的にCMakeが単純なテストプログラムをコンパイルできなかったことを意味します(コンパイラの識別/検証の一部として常に実行されます)。
CMakeFiles\CMakeError.log
(バイナリ出力ディレクトリに対して)を調べると、エラーの理由がそこにあるはずです。
私がこれまでに出くわした2つの考えられる理由:
管理者権限がありません。 Visual Studioが管理者権限を必要とするようにセットアップされている場合、クロスチェックする管理権限を持つシェルからこれを再度実行してみてください。
Windows SDKがありません。 SDKインストールを確認します(例:リソースコンパイラがインストールされていることを確認してください。次のようなパスにある必要があります。
C:\Program Files (x86)\Microsoft SDKs\Windows\v[some version]\bin\RC.Exe
Visual Studio 2017のインストール
Visual Studioは、C++の定義済みパッケージの1つを選択した場合でも、すべての必要なC++パッケージをnotインストールできないことに注意してください(たとえば、Desktop development with C++
を使用して追加した後) Individual Components
タブの下にある他のパッケージ)。
以下は、私にとって有効な選択です(VS2017 Community Edition、Windows 10):
MFC/ATLライブラリを使用するプロジェクトがある場合は、SDKs, libraries, and frameworks
サブカテゴリに追加する必要があります。
参考文献
私はWindows 7を使用しています。そして、@ FlorianがコメントでCMakeFiles/CMakeError.log
私は問題を解決できた!
最初のログは次のとおりです。
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler:
Build flags:
Id flags:
The output was:
1
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 3/10/2017 11:05:24 AM.
Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\v141\Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default targets) -- FAILED.
Build FAILED.
"D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default target) (1) ->
(Desktop_PlatformPrepareForBuild target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\v141\Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.28
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler:
Build flags:
Id flags:
The output was:
1
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 3/10/2017 11:05:24 AM.
Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\v141\Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default targets) -- FAILED.
Build FAILED.
"D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default target) (1) ->
(Desktop_PlatformPrepareForBuild target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\v141\Toolset.targets(36,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.13
Windows SDK version 8.1
そのため、コンポーネントとしてインストールしました(バージョン10のみがインストールされていました)。しかし、その後、別のエラーがありました:
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler:
Build flags:
Id flags:
The output was:
1
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 3/10/2017 11:17:21 AM.
Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "Debug\".
Creating directory "Debug\CompilerIdC.tlog\".
InitializeBuildStatus:
Creating "Debug\CompilerIdC.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x64\CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc141.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
CMakeCCompilerId.c
Link:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x64\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 LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default targets) -- FAILED.
Build FAILED.
"D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj" (default target) (1) ->
(Link target) ->
LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdC\CompilerIdC.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:01.04
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler:
Build flags:
Id flags:
The output was:
1
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 3/10/2017 11:17:22 AM.
Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "Debug\".
Creating directory "Debug\CompilerIdCXX.tlog\".
InitializeBuildStatus:
Creating "Debug\CompilerIdCXX.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x64\CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc141.pdb" /Gd /TP /errorReport:queue CMakeCXXCompilerId.cpp
CMakeCXXCompilerId.cpp
Link:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdCXX.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:".\CompilerIdCXX.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdCXX.lib" /MACHINE:X64 Debug\CMakeCXXCompilerId.obj
LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
Done Building Project "D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default targets) -- FAILED.
Build FAILED.
"D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj" (default target) (1) ->
(Link target) ->
LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [D:\doctest\build\CMakeFiles\3.8.0-rc2\CompilerIdCXX\CompilerIdCXX.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.60
そう LINK : fatal error LNK1104: cannot open file 'ucrtd.lib'
は、より多くのコンポーネントをインストールする必要があるように思えます。
Visual C++ runtime for UWP
Windows Universal CRT SDK
そしてその後、問題はなくなりました!
Windows 10 Creator's Update SDKがインストールされている場合、インストールサイズを小さくするために、デフォルトではデスクトップバイナリはインストールされません。 CMakeは、コンパイル時に常に最新のSDKを使用しようとしますが、「gdi32.lib」などのバイナリが見つからないため失敗します(これは私にとって最初のエラーです)。
Microsoftはこれを「既知の問題」としてリストしています。 Visual C++ Desktopの既知の問題 を参照してください。
Windows 10 Creators Update SDKは、デフォルトでインストールフットプリントを削減するためにリファクタリングされました。 UWPワークロードを介してこのSDKをインストールすると、Win32 C++デスクトッププロジェクトに必要なヘッダー/ライブラリはインストールされません。
この問題を修正するには、Visual Studioのインストールを変更して、Windows 10 SDK (10.0.15063.0)
for Desktopコンポーネントを含める必要があります。
私にとって、私は前にvs2015をインストールし、cコンパイラ2015は前に動作します、vs2017をインストールすると、同じエラーが発生しますcan't find compiler
。そして、cmake ..
vs2017開発者コマンドでは、動作します。そして、私はgeneretorをvs2015またはvs2017に指定できます、それはすべて動作します。
Windows 10.0.17134 Build 17134; Visual Studio 2017コミュニティ(15.9.7)
すべての必要なコンポーネントがインストールされています
私の場合( Wireshark building )、間違ったツールセットにエラーがありました。 CMakeはv141を決定しますが、実際のバージョンはv140です。
cmake -G "Visual Studio 15 2017" -T v140,Host=x64 ..
同様の問題が発生しました。
最初に「C++を使用したデスクトップ開発」のチェックを外し、次に「C++を使用したデスクトップ開発」を再チェックすることで解決しました。