2013-06-24 62 views
53

私のOSはcentosで、パスにデフォルトのgccがあります/usr/bin/gcc。しかし、古いです、私はgccの新しいバージョンが必要です。だから私は新しいパス/usr/local/bin/gccに新しいバージョンをインストールします。cmakeに新しいgccパスを指定する方法

しかし、cmakeを実行しても、古いバージョンのgccパス(/usr/bin/gcc)が使用されています。 gccを新しいパスに指定するにはどうすればいいですか(/usr/local/bin/gcc)。

/usr/bin/gcc/usr/local/bin/gccで上書きしようとしましたが、機能しません。

答えて

114

はcmakeのを呼び出す前にCMAKE_C_COMPILERが、輸出CC(およびCXX)を上書きしない:

export CC=/usr/local/bin/gcc 
export CXX=/usr/local/bin/g++ 
cmake /path/to/your/project 
make 

輸出は一度だけ行われるように、あなたが初めて設定を必要としますそれらの値はCMakeキャッシュから読み込まれます。


UPDATE:それはCMakeののキャッシュと、それので、うまく再生されませんので、私は2つの主な理由のためにCMAKE_C(XX)_COMPILER値をオーバーライドすることは推奨ジェイクさんのコメント

CMAKE_C(XX)_COMPILERをオーバーライドしていない理由について長い説明コンパイラのチェックとツーリングの検出を中断します。

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 "") 

...その後、のキャッシュを更新せ、[OK]をこのバージョンでは、単に "動作しない" だろう。変数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のは、コンパイラにチェックを実行します。それは動作しますか?実行可能ファイルを生成できますか?コンパイラを使用してarranlibなどの関連ツールを検出します。スクリプトでコンパイラの値を上書きすると、「遅すぎる」とみなされ、すべての検査と検出が完了します。 /usr/bin/clangsetコマンドを使用するときに

は例えば、デフォルトコンパイラとしてgccを持つ私のマシン上で、ar/usr/bin/gcc-ar-7に設定されています。 CMakeを実行する前にエクスポートを使用するときは/usr/lib/llvm-3.8/bin/llvm-arに設定されます。

+0

はい、それは機能します!ありがとう@ギヨーム! – tidy

+0

適切なコンパイラがあなたの$ PATHに設定されているならば、lazyに相当する:export CC = 'which gcc' > export CXX =' which g ++ ' – gerardw

+7

あなたの$に適切なコンパイラが設定されていれば、パス: 'export CC = \' which gcc \ ' export CXX = \' which g ++ \ ' – gerardw

2

エクスポートには、使用する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本は別の解決策は、クリーンビルドディレクトリから始まる、cmakeの-GUIを通して、あなたのプロジェクトを設定することですCMakeList.txt

2

-std=C++-11フラグを使用して処理することができます。あなたが最初に利用できるオプションの中には、コンパイラへの正確なパスを選択する可能性があります。

関連する問題