2017-03-28 8 views
1

私はMingw64 GCC 6.3.0(常にPATH)とVisual Studio 2017 RTM(PATHではない)のVisual C++コンパイラツールを持っています。CMakeが忍者用のVisual C++コンパイラツールを検出するために使用する環境変数

cmake . -G "MinGW Makefiles"を実行すると、GCC 6.3.0が選択されます。

cmake . -G "Ninja"を実行すると、GCC 6.3.0が選択されます。

私のVisual C++コンパイラツールは標準ではありません。私は必要な部分だけを残し、残りの部分は削除します(MSBuild、IDEなど)。私はPATHINCLUDELIBを設定するために自分のバッチスクリプトを使用しています。

このバッチスクリプトを実行してcmake .を実行すると、MSVCが選択され、NMakeでビルドされます。

cmake . -G "Ninja"と同じ環境では、MSVCの代わりにGCC 6.3.0が選択されます。

私の質問は、両方の場合にGCC + NinjaではなくMSVC + Ninjaを使用するように指示する方法です。PATH?私が設定すべき環境変数は何ですか?

答えて

5

ます。また、逆のアプローチを使用し、CMAKE_IGNORE_PATHにしたくないすべてのコンパイラを除外することができて、あなたのcmakeのプロジェクトをビルドする

set(CMAKE_C_COMPILER cl.exe) 
set(CMAKE_CXX_COMPILER cl.exe) 

にツールチェインファイルを使用します。無視するパスのリストが必要ですが、正確な文字列の一致が必要であることに注意してください。利点は、コマンドラインから直接それらを宣言できることです。

私がしたことは、コンパイラからのパスを取ることですが、 "取らない"ことはCMAKE_IGNORE_PATHにあります。

> cmake -G"Ninja" .. 
... 
-- Check for working C compiler: C:/MinGW/bin/cc.exe 
... 

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin" -G"Ninja" .. 
... 
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe 
... 

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin" -G"Ninja" .. 
... 
-- Check for working C compiler: C:/Program Files (x86)/LLVM/bin/clang.exe 
... 

そして、私のシステム上の

は私 PATH(それぞれがしようとちょうど空のバイナリ出力ディレクトリから開始することを確認してください)に実際には3つのGCCコンパイラがありました
> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin;C:/Program Files (x86)/LLVM/bin" -G"Ninja" .. 
... 
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe 
... 
3

はその後-DCMAKE_TOOLCHAIN_FILEと= toolchainfile

関連する問題