Wir haben Probleme mit einem fehlerhaften CMake, der auf MinGW und MinGW-64 aufbaut. Unser Projekt ist eine C++ Bibliothek. Unser CMakeLists.txt
hat einen Block wie unten. Der Block identifiziert die Zielplattform durch den Compiler (andere Verfahren zu unzuverlässig sind, vor allem auf ARM, MIPS und PPC):Die Variable ist nach dem Ausführen des Befehls auf MinGW und MinGW-64 leer?
set(SHELL_CMD sh -c)
set(GREP_CMD egrep -i -c)
execute_process(COMMAND ${SHELL_CMD} "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND ${GREP_CMD} "amd64"
OUTPUT_VARIABLE CRYPTOPP_AMD64
OUTPUT_STRIP_TRAILING_WHITESPACE)
...
# http://github.com/weidai11/cryptopp/issues/466
execute_process(COMMAND ${SHELL_CMD} "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND ${GREP_CMD} "mingw32"
OUTPUT_VARIABLE CRYPTOPP_MINGW32
OUTPUT_STRIP_TRAILING_WHITESPACE)
# http://github.com/weidai11/cryptopp/issues/466
execute_process(COMMAND ${SHELL_CMD} "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND ${GREP_CMD} "w64-mingw32"
OUTPUT_VARIABLE CRYPTOPP_MINGW64
OUTPUT_STRIP_TRAILING_WHITESPACE)
es auf 9 von 11 Plattformen erfolgreich ist, aber nicht für MinGW und MinGW-64. Folgendes auf MinGW-64 aus unserer bug report das Problem Tracking:
execute_process(COMMAND ${SHELL_CMD} "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND ${GREP_CMD} "w64-mingw32"
OUTPUT_VARIABLE CRYPTOPP_MINGW64
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS ${CRYPTOPP_MINGW64})
execute_process(COMMAND ${SHELL_CMD} "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1"
COMMAND ${GREP_CMD} "mingw32"
OUTPUT_VARIABLE CRYPTOPP_MINGW32
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS ${CRYPTOPP_MINGW32})
Die Aussagen eine leere Nachricht zu erzeugen. Das Entfernen von OUTPUT_STRIP_TRAILING_WHITESPACE
hat keine Auswirkungen auf das Problem. Und das Ausführen von c++ -dumpmachine | egrep -i -c w64-mingw32
vom MinGW-Terminal führt zu erwarteten Ergebnissen.
Wir haben gefunden CMAKE_COMPILER_IS_GNUCXX and CMAKE_CXX_COMPILER_ID are empty, aber es scheint nicht zutreffen, da der Compiler in unserem Fall festgelegt ist. (Es ist das einzige andere "cmake leere Variable mingw", die wir gefunden haben).
Leider weiß ich nicht, welche Version von Cmake verwendet wird. Unser bug report enthält den CMake-Ausgang, aber CMake kann seine Versionsnummern nicht drucken.
Warum kann CMake die Variablen CRYPTOPP_MINGW64
und CRYPTOPP_MINGW32
nicht auf MinGW und MinGW-64 setzen?
Hier ist eine typische Ausgabe von CMake während der Konfiguration.
Dank @vre. Lass mich es versuchen. Leider habe ich keine MinGW-Maschine zum Testen, also muss ich jemand anderen bitten, den Test durchzuführen. Aber ich kann die Veränderung auf den anderen Plattformen testen. – jww
Eine andere Frage (wenn es Ihnen nichts ausmacht): Sollten die Argumente getrennt zitiert werden? "Execute_process (COMMAND" $ {SHELL_CMD} "" $ {SHELL_CMD_ARGS} "" $ {CMAKE_CXX_COMPILER} "" -dumpmachine "" 2> & 1 "'? Die CMake-Dokumente für [execute_process] (https://cmake.org /cmake/help/v3.0/command/execute_process.html) erkläre die Dinge nicht sehr gut und biete keine Beispiele an (* qv *). – jww
Es scheint, dass das Dokumentationsproblem seit Jahren existiert.Hier ist ein Beispiel für das Problem datiert aus dem Jahr 2011: [Cmake execute_process() immer irgendwie „Keine solche Datei oder das Verzeichnis“, wenn ich git nennen] (https://stackoverflow.com/q/6797395/608639). Es verwirrt mich, wenn ein Projekt seine Dokumentation nicht repariert. Was ist der Sinn dafür, dass Benutzer Jahr für Jahr immer wieder die gleichen Fehler machen? – jww