Visual Studio 2019をインストールしている環境で、CMakeのコンパイラにVisual Studio 2015を指定した場合など、Configure時点でrc.exeなどが見つからずにエラーになる場合があるため、その対処方法をのせておきます。
Contents
CMakeのエラー事象
Visual Studio 2019をインストールしている環境で、VS2015のビルド環境からCMakeを起動するとConfigure時にCMakeTestCXXCompiler.cmake
でCMake Error
が発生します。
詳細なメッセージを確認すると、rcコマンド部分で 指定されたファイルが見つかりません
というエラーが発生しているようです。
CMakeでエラーになる原因
ビルド時に使うrc.exeなどはWindows 10 SDKに含まれているようなのですが、Windows 10 SDKは複数バージョンを同時にインストールできるようになっているため、SDKのバージョンごとにフォルダが作成されます。そして、rc.exeなども、各Windows 10 SDKのフォルダ配下に格納されます。
Visual Studio 2019の環境ではデフォルトで使用するWindows 10 SDKのフォルダにパスが通っていますが、Visual Studio 2015のビルド環境ではWindows 10 SDKのフォルダにパスが通っていません。そのため、CMakeのConfigure時にrc.exeなどが見つからずにエラーが発生します。
Visual StudioのNative Tools Command Promptを起動して、whereコマンドでrcを検索したときの結果は以下の通りです。VS2019の場合はWindows 10 SDKへのパスが通った状態ですが、VS2015の場合はパスが通っていないためファイルが見つかりません。
********************************************************************** ** Visual Studio 2019 Developer Command Prompt v16.5.2 ** Copyright (c) 2019 Microsoft Corporation ********************************************************************** [vcvarsall.bat] Environment initialized for: 'x64' C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>where rc C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\rc.exe
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>where rc 情報: 与えられたパターンのファイルが見つかりませんでした。
対処方法
利用しているWindows 10 SDKの該当フォルダにパスを通せばOKです。
Windows 10 SDKはC:\Program Files (x86)\Windows Kits\10\bin
にバージョンごとのフォルダが作成されるため、利用するバージョン配下のx64フォルダにパスを通します。
このとき既定のWindows 10 SDKのバージョンは、環境変数WindowsSDKVersion
に格納されていると思われるため、C:\Program Files (x86)\Windows Kits\10\bin\%WindowsSDKVersion%x64
というパスの指定も可能です。
Windows 10 SDKへのパスが設定されないのはVS2015の環境だけだと思われる(VS2019ではパスが通っている)ため、VS2015 x64 Native Tools コマンドプロンプトを起動したときだけ、以下のコマンドを入力してWindows 10 SDKへのパスを追加すると良いと思います。
# VS2015 x64 Native Tools Command PromptでWindows 10 SDKへのパスを追加する set PATH=%PATH%;C:\Program Files (x86)\Windows Kits\10\bin\%WindowsSDKVersion%x64
対応方法を調べている途中で、rc.exe
とrcdll.dll
をVCのディレクトリにコピーするような情報も見つけましたが、実際のビルドではrc.exe以外のファイルも必要になるケースが多いため、ファイルをコピーするのではなく、上記で紹介しているパスを通す方法をおすすめします。