は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のは、コンパイラにチェックを実行します。それは動作しますか?実行可能ファイルを生成できますか?コンパイラを使用してar
やranlib
などの関連ツールを検出します。スクリプトでコンパイラの値を上書きすると、「遅すぎる」とみなされ、すべての検査と検出が完了します。 /usr/bin/clang
へset
コマンドを使用するときに
は例えば、デフォルトコンパイラとしてgccを持つ私のマシン上で、ar
は/usr/bin/gcc-ar-7
に設定されています。 CMakeを実行する前にエクスポートを使用するときは/usr/lib/llvm-3.8/bin/llvm-ar
に設定されます。
はい、それは機能します!ありがとう@ギヨーム! – tidy
適切なコンパイラがあなたの$ PATHに設定されているならば、lazyに相当する:export CC = 'which gcc' > export CXX =' which g ++ ' – gerardw
あなたの$に適切なコンパイラが設定されていれば、パス: 'export CC = \' which gcc \ ' export CXX = \' which g ++ \ ' – gerardw