2016-10-11 4 views
0

Ich habe die folgenden Zeilen in meiner CMakeLists.txt-Datei. Ich verwende CMake 3.5.2 unter Windows 7 und verwende Visual Studio 12 2013 als Generator mit "Benutze standardmäßige native Compiler" in der GUI.Wie werden CMake execute_process Befehle ausgeführt?

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

Das läuft gut.

Aber genau wie wird es ausgeführt? Es ist auf Windows!

Ich habe das Makefile über MSYS2 (MinGW) unter Windows bereits kompiliert, aber wenn CMake es benutzt, dann weiß ich nicht, wie es das zu tun weiß.

Bearbeiten: Ich legte execute_process(COMMAND uname -a) in die Datei CMakeLists.txt und bekam MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297/5/3) 2016-07-15 08:31 x86_64 Msys. Ich denke also, die Antworten darauf, dass es durch MSYS läuft ... aber wie weiß CMake das zu tun?

The documentation sagt:

„CDie den Prozess Kind führt direkt mit Betriebssystem-APIs Alle Argumente VERBATIM zu den untergeordneten Prozess übergeben werden keine Zwischenschale verwendet wird, so Shell-Operatoren wie> normal behandelt werden.. Argumente."

Aber ich verstehe nicht, was das bedeutet, besonders wenn man bedenkt, dass, wenn ich die folgende Zeile verwenden, erhalte ich /usr/bin/make als Ausgabe:

execute_process(COMMAND which make) 

Was passiert ist und/oder wie kann ich herausfinden, Welche Umgebung/Shell/was auch immer diese Befehle ausgeführt werden?

+1

Sieht aus wie Sie Cmake unter MinGW oder ähnlich laufen. – Tsyvarev

+0

Das würde Sinn machen, denn so habe ich Teile davon kompiliert (eigentlich mit MSYS2), aber woher weiß CMake, es zu benutzen? –

+0

Wahrscheinlich führen Sie cmake unter MSYS2 aus, oder installieren Sie es unter dieser Umgebung. – Tsyvarev

Antwort

2

CMake kommt mit Kitware OS Abstraktion/Detektions-Bibliothek kwsys:

KWSys bietet eine plattformunabhängige API für viele gemeinsame System Funktionen, die unterschiedlich auf jeder Plattform implementiert sind.

Die execute_process() Magie geschieht in ProcessWin32.cCreateProcessW() oder ProcessUNIX.c mit execvp() mit je, welche Version von CMake Sie verwenden.

So - wie @Tsyvarev hat kommentiert - Ihr Verhalten könnte entweder die Win32/64-Version von CMake sein mit MinGW/MSYS in der PATH Umgebung (Auffinden der Unix-spezifischen Befehle gegeben) oder die MinGW32/64-Version von CMake läuft aus MSYS.

Auch Sie können die Verwendung von etwas wie die FindUnixCommands betrachten, um absolute Pfade zu den Unix-Tools in Frage zu bekommen.

Referenz

+0

Wunderbar, danke! –

Verwandte Themen