CMakeLists.txt:30 (プロジェクト) での CMake エラー:CMAKE_C_COMPILER が見つかりませんでした

これらのエラー メッセージ

CMake Error at ... (project):
    No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".

または

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!

CMake が単純なテスト プログラムをコンパイルするための C/CXX コンパイラを見つけることができなかったことを意味します (CMake がビルド環境を検出するときに最初に試行することの 1 つです)。

問題を見つける手順は、生成するビルド環境によって異なります。次のチュートリアルは、Stack Overflow に関する回答と、Microsoft Windows 7/8/10 および Ubuntu 14.04 での CMake に関する私自身の経験の一部です。

前提条件

  • コンパイラ/IDE をインストールし、(CMake を使用せずに直接) 他のプログラムをコンパイルできた
    • あなた。 IDE を持っている可能性がありますが、CMake を使用した VS 2017 のソリューションを生成する問題で説明されているように、コンパイラまたはサポート フレームワーク自体をインストールしていない可能性があります または Windows で Clang を使用するように CMake に指示するにはどうすればよいですか?
  • 最新の CMake バージョンを持っている
  • CMake でビルド環境を生成するドライブへのアクセス権がある
  • <リ>

    クリーンなビルド ディレクトリがあります (CMake は最後の試行からのものをキャッシュするため)。ソースツリーのサブディレクトリとして

    Windows cmd.exe

    > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015
    

    Bash シェル

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS
    

    コマンド シェルが、新しく作成したバイナリ出力ディレクトリを指していることを確認してください。

試すことができる/すべき一般的なこと

<オール> <リ>

CMake は、デフォルトのコンパイラを見つけて実行できますか?ジェネレーターを与えずに実行

> cmake ..
-- Building for: Visual Studio 14 2015
...

使用するジェネレーターを正しく決定した場合は完璧です-ここのように Visual Studio 14 2015

<リ>

実際に失敗したのは何ですか?

前のビルド出力ディレクトリで、CMakeFiles\CMakeError.log を見てください。 意味のあるエラー メッセージについては、CMakeFiles\[Version]\CompilerIdC で生成されたテスト プロジェクトを開いてコンパイルしてみてください。 |CompilerIdCXX コマンド ラインから直接 (エラー ログに表示されます)。

CMake が Visual Studio を見つけられない

<オール> <リ>

正しいジェネレーターのバージョンを選択してみてください:

> cmake --help
> cmake -G "Visual Studio 14 2015" ..
<リ>

それでも問題が解決しない場合は、最初に Visual Studio 環境変数を設定してみてください (パスは異なる場合があります):

> "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
> cmake ..

または Developer Command Prompt for VS2015 を使用します All Programs の下の Windows スタート メニューのショートカット /Visual Studio 2015 /Visual Studio Tools (ヒントをくれた @Antwane に感謝します)。

背景 :CMake は、Visual Studio のすべてのリリースとフレーバー (Express、Community、Professional、Premium、Test、Team、Enterprise、Ultimate など) をサポートしています。コンパイラの場所を特定するために、レジストリの検索を組み合わせて使用​​します (例:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir )、システム環境変数、および - 他のどれも何かを思い付かなかった場合 - 単純にコンパイラーを呼び出してみてください。

CMake が GCC (MinGW/MSys) を見つけられない

<オール> <リ>

MSys bash を起動します msys.bat のシェル gcc を直接呼び出してみてください

$ gcc
gcc.exe: fatal error: no input files
compilation terminated.

ここで gcc が見つかりました 動作するパラメータを何も与えていないと不平を言っています.

したがって、次のように動作するはずです:

$ cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ make

GCC が見つからない場合は、export PATH=... を呼び出します コンパイラ パスを追加するには (CMake スクリプトで PATH 環境変数を設定する方法を参照してください)。 )、もう一度やり直してください。

<リ>

それでも機能しない場合は、CXX を設定してみてください コンパイラ パスを直接エクスポートする (パスは異なる場合があります)

$ export CC=/c/MinGW/bin/gcc.exe
$ export CXX=/c/MinGW/bin/g++.exe
$ cmake -G "MinGW Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ mingw32-make

詳細については、CMake の新しい GCC パスを指定する方法を参照してください

注意 :"MinGW Makefiles" ジェネレーターを使用する場合は、mingw32-make を使用する必要があります MinGWで配布されるプログラム

<リ>

まだ動作していません?それは変だ。コンパイラがそこにあり、実行権限があることを確認してください (上記の前提条件の章も参照してください)。

それ以外の場合、CMake の最後の手段は、コンパイラ検索自体を試行せず、CMake の内部変数を直接設定することです

$ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

詳細については、Cmake は -D CMAKE_CXX_COMPILER=g++ を尊重しないを参照してください。 および Cmake エラー設定コンパイラ

または、これらの変数を cmake-gui.exe 経由で設定することもできます Windows で。 Cmake がコンパイラを見つけられないを参照してください

背景 :Visual Studio とほぼ同じです。 CMake はあらゆる種類の GCC フレーバーをサポートしています。環境変数 (CC、CXX など) を検索するか、単にコンパイラを呼び出そうとします。さらに、プレフィックスを検出し (クロスコンパイル時)、GNU コンパイラ ツールチェーンのすべての binutils に追加しようとします (arranlibstripldnmobjdump 、および objcopy ).


Ubuntu の場合、以下のものをインストールしてください:

sudo apt-get update && sudo apt-get install build-essential

これは、Visual Studio 15 2017 をインストールした後に起こりました。

Visual Studio 14 2015 の C++ コンパイラは問題ではありませんでした。 Windows 10 SDK に問題があるようです。

Windows 10 SDK を Visual Studio 14 2015 に追加すると、問題が解決しました。

添付のスクリーンショットを参照してください。