回答:
上書きせずCMAKE_C_COMPILER、cmakeを呼び出す前にエクスポートCC(およびCXX)します。
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make
エクスポートは、プロジェクトを初めて構成するときに一度だけ行う必要があります。その後、これらの値はCMakeキャッシュから読み取られます。
更新:CMAKE_C(XX)_COMPILERジェイクのコメントの後にオーバーライドしない理由についてのより長い説明
CMAKE_C(XX)_COMPILER2つの主な理由で値を上書きしないことをお勧めします。CMakeのキャッシュではうまく機能しないことと、コンパイラチェックとツールの検出を壊すことです。
setコマンドを使用する場合、3つのオプションがあります。
への可能な3つの呼び出しで何が起こるか見てみましょうset:
キャッシュなし
set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
これを行う場合CMAKE_C(XX)_COMPILER、同じ名前のキャッシュ変数を非表示にする「通常の」変数を作成します。これは、コンパイラがビルドスクリプトでハードコードされ、カスタム値を指定できないことを意味します。これは、コンパイラが異なる複数のビルド環境がある場合に問題になります。別のコンパイラを使用するたびにスクリプトを更新するだけで、最初にCMakeを使用する価値がなくなります。
では、キャッシュを更新しましょう...
キャッシュあり
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")
このバージョンは「機能しない」だけです。CMAKE_C(XX)_COMPILER変数がすでにキャッシュ内にあるので、あなたはそれを強制しない限り、それは更新されません。
あ...力を使ってみよう...
強制的にキャッシュ
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)
これは「通常の」変数バージョンとほぼ同じです。唯一の違いは、ユーザーの値がキャッシュに設定されるため、ユーザーが確認できることです。ただし、変更はsetコマンドによって上書きされます。
コンパイラチェックとツールの破壊
構成プロセスの初期に、CMakeはコンパイラーのチェックを実行します。実行可能ファイルを生成できますか?など。また、コンパイラを使用して、arおよびなどの関連ツールを検出しますranlib。スクリプトのコンパイラ値をオーバーライドすると、「遅すぎる」ので、すべてのチェックと検出がすでに行われています。
たとえば、gccをデフォルトのコンパイラとして使用しているマシンでは、settoコマンドを使用すると/usr/bin/clang、arに設定され/usr/bin/gcc-ar-7ます。CMakeを実行する前にエクスポートを使用すると、エクスポートはに設定され/usr/lib/llvm-3.8/bin/llvm-arます。
which gcc > export CXX =which g++
export CC=`which gcc` export CXX=`which g++`
Incorrect 'gcc' version 'compiler.version=5.3' is not the one detected by CMake: 'GNU=4.8'
CMAKE_C_COMPILER、コマンドラインを使用して設定すれば、設定はうまく機能します$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source。
この質問はかなり古いですが、それでもGoogle検索で出てきます。受け入れられた質問は、私にとってはもはや機能せず、高齢のようです。cmakeに関する最新情報はcmake FAQに記載されています。
コンパイラのパスを変更するには、さまざまな方法があります。一つの方法は
CMAKE_FOO_COMPILERを使用して、コマンドラインで適切な変数を有効なコンパイラ名またはフルパスに設定しcmake -Dます。例えば:cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source
gcc-4.2あなたの代わりにpath/to/your/compilerこのように書くことができます
cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .
セットする CMAKE_C_COMPILER新しいパスにします。
ここを参照してください:http : //www.cmake.org/Wiki/CMake_Useful_Variables
ユーザーが複数のバージョンのコンパイラーを持っている場合、正常にコンパイルされないため、エクスポートは使用するGCC / G ++のバージョンに固有でなければなりません。
export CC=path_of_gcc/gcc-version
export CXX=path_of_g++/g++-version
cmake path_of_project_contain_CMakeList.txt
make
プロジェクトでC ++ 11を使用する場合、これは-std=C++-11CMakeList.txtのフラグを使用して処理できます。
これは、だけcmakeでなく、./configureおよびでも機能しmakeます。
./configure CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++
結果は次のとおりです。
checking for gcc... /usr/local/bin/gcc
checking whether the C compiler works... yes
CMAKE_<LANG>_COMPILER再構成をトリガーせずにパスをする別のコンパイラでコンパイルしたかったのですが、コマンドラインで-Dオプションを渡して、別のコンパイラを設定すると完全に消去されてしまいました。これは、再構成がトリガーされるために発生します。コツは、でコンパイラの検出を無効にしNONE、でパスを設定してFORCEからenable_languageです。
project( sample_project NONE )
set( COMPILER_BIN /opt/compiler/bin )
set( CMAKE_C_COMPILER ${COMPILER_BIN}/clang CACHE PATH "clang" FORCE )
set( CMAKE_CXX_COMPILER ${COMPILER_BIN}/clang++ CACHE PATH "clang++" FORCE )
enable_language( C CXX )
より賢明な選択は、ツールチェーンファイルを作成することです。
set( CMAKE_SYSTEM_NAME Darwin )
set( COMPILER_BIN /opt/compiler/bin )
set( CMAKE_C_COMPILER ${COMPILER_BIN}/clang CACHE PATH "clang" )
set( CMAKE_CXX_COMPILER ${COMPILER_BIN}/clang++ CACHE PATH "clang++" )
次に、追加のフラグでCmakeを呼び出します
cmake -D CMAKE_TOOLCHAIN_FILE=/path/to/toolchain_file.cmake ...
/optではなくに代替のgccバージョンをインストールすることをお勧めし/usr/localます。できれば/opt/gcc-x.y.z。これにより、さらに新しいバージョンが必要になった場合でも、以前のバージョンをアンインストールするのに問題はありません。