web-dev-qa-db-ja.com

CMakeを使用したVS 2017のソリューション生成の問題

そこで、昨日Visual Studio 2017をインストールしました。 VS 2017をサポートするCMake 3.7.2もインストールしました。

私のVSのインストールには、Game development with C++ワークフロー+その他のコンポーネントがいくつかあります。

individual_components

また、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.exeVersion 19.10.25017にあるときにVC\Tools\MSVC\14.10.25017\binを報告するのはなぜですか?

22
onqtam

コメントを回答に変える

エラー-- The CXX compiler identification is unknown - No CMAKE_CXX_COMPILER could be found.は、基本的にCMakeが単純なテストプログラムをコンパイルできなかったことを意味します(コンパイラの識別/検証の一部として常に実行されます)。

CMakeFiles\CMakeError.log(バイナリ出力ディレクトリに対して)を調べると、エラーの理由がそこにあるはずです。

私がこれまでに出くわした2つの考えられる理由:

  1. 管理者権限がありません。 Visual Studioが管理者権限を必要とするようにセットアップされている場合、クロスチェックする管理権限を持つシェルからこれを再度実行してみてください。

  2. 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):

enter image description here

MFC/ATLライブラリを使用するプロジェクトがある場合は、SDKs, libraries, and frameworksサブカテゴリに追加する必要があります。

enter image description here

参考文献

22
Florian

私は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

そしてその後、問題はなくなりました!

6
onqtam

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コンポーネントを含める必要があります。

Install Creator's Update SDK for Desktop

2
Mark Ingram

私にとって、私は前にvs2015をインストールし、cコンパイラ2015は前に動作します、vs2017をインストールすると、同じエラーが発生しますcan't find compiler。そして、cmake .. vs2017開発者コマンドでは、動作します。そして、私はgeneretorをvs2015またはvs2017に指定できます、それはすべて動作します。

0
aboutqx

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 ..
0
slinkin

同様の問題が発生しました。

最初に「C++を使用したデスクトップ開発」のチェックを外し、次に「C++を使用したデスクトップ開発」を再チェックすることで解決しました。

0
DennisWu