2016-10-11 24 views
0

私は私のCMakeLists.txtファイルに以下の行を持っています。私は、Windows 7上でCMakeの3.5.2を実行し、GUIで確認し、「デフォルトを使用ネイティブ・コンパイラ」と発電機としてのVisual Studio 12の2013を使用しています。CMake execute_processコマンドはどのように実行されますか?

find_path(FORTRAN_DIR NAMES cdll.cpp fdll.f90 Makefile PATHS ../source) 
execute_process(COMMAND make 
       WORKING_DIRECTORY ${FORTRAN_DIR}) 

これはうまく動作します。

しかし、正確にどのようにそれが実行されています?それはWindows上です!

は私が前にWindows上でMSYS2(MinGWの)を経由してMakefileをコンパイルしたが、それはCMakeのを使用しているものだと、私はそれはそれを行うために知っているかどうかはわかりません。

編集:execute_process(COMMAND uname -a)をCMakeLists.txtファイルに入れ、MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297/5/3) 2016-07-15 08:31 x86_64 Msysを得ました。だから私はそれがMSYSを介して実行されている答えを推測する...しかし、CMakeはこれを行う方法を知っていますか?

The documentationは言う:。

「CMakeの直接のすべての引数は子プロセスにVERBATIM渡され、オペレーティング・システムAPIを使用して子プロセスを実行>ノーマルとして扱われるように中間シェルは、そのシェルの演算子を使用されていません。引数。

しかし、私は特に、私は次の行を使用している場合、私は出力として/usr/bin/makeを得ることを考慮すると、どのようなことを意味理解していない:何が起こっている

execute_process(COMMAND which make) 

、および/またはどのように私は把握することができますどんな環境/シェル/これらのコマンドが実行されているのですか?

+1

あなたはMinGWのまたは類似の下でcmakeの実行のように見えます。それは私が(実際にMSYS2、と)以前にコンパイルするには、このの断片を得ている方法なので、理にかなっているが、どのようにCMakeのは、それを使用するために知っている – Tsyvarev

+0

? –

+0

おそらく、MSKE2の下でcmakeを実行するか、それをその環境の下にインストールします。 – Tsyvarev

答えて

2

cmakeのはKitwareのOS抽象化/検出ライブラリkwsysが付属しています:

KWSysすべてのプラットフォーム上で別々に実装されている多くの一般的なシステム 機能へのプラットフォームに依存しないAPIを提供します。

execute_process()魔法は、使用しているにCMakeのバージョンに依存しexecvp()を使用してCreateProcessW()ProcessUNIX.cを使用してProcessWin32.cで起こっています。だから、

- あなたの行動はPATH環境でMinGW/MSYSでCMakeのののWin32/64バージョンである可能性のいずれか(与えられたUnixの特定のコマンドを見つけること)やCMakeののMINGW32/64バージョンから実行する - @TsyvarevがコメントしたようにMSYS

また、あなたは、問題のUnixツールへの絶対パスを取得するためにFindUnixCommandsのようなものの使用を考慮することができます。

リファレンス

+0

Wonderful、ありがとうございます! –

関連する問題