私のOSは、パス/usr/bin/gcc
にデフォルトのgccがあるcentosです。しかし、それは古く、新しいバージョンのgccが必要です。そこで、新しいパス/usr/local/bin/gcc
に新しいバージョンをインストールします。
しかし、cmake
を実行すると、古いバージョンのgcc path(/usr/bin/gcc
)が引き続き使用されます。新しいパス(/usr/local/bin/gcc
)にgccを指定するにはどうすればよいですか。
/usr/bin/gcc
を/usr/local/bin/gcc
で上書きしようとしましたが、うまくいきません。
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キャッシュから読み取られます。
UPDATE:Jakeのコメントの後にCMAKE_C(XX)_COMPILER
をオーバーライドしない理由に関する長い説明
CMAKE_C(XX)_COMPILER
の値をオーバーライドすることは、主に2つの理由でお勧めします。CMakeのキャッシュでうまく機能しないことと、コンパイラーのチェックとツールの検出を壊すことです。
set
コマンドを使用する場合、次の3つのオプションがあります。
set
の3つの可能な呼び出しで何が起こるか見てみましょう。
キャッシュなし
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をデフォルトコンパイラとして使用しているマシンでは、set
コマンドを/usr/bin/clang
に使用すると、ar
が/usr/bin/gcc-ar-7
に設定されます。 CMakeを実行する前にエクスポートを使用する場合、/usr/lib/llvm-3.8/bin/llvm-ar
に設定されます。
この質問は非常に古いものですが、それでも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を使用する場合、CMakeList.txtの-std=C++-11
フラグを使用してこれを処理できます
別の解決策は、クリーンなビルドディレクトリから開始してcmake-guiを使用してプロジェクトを構成することです。最初に利用可能なオプションの中から、コンパイラへの正確なパスを選択する可能性があります