Ich habe ein kleines Testprojekt , das OpenMP für Parallelisierung verwendet. Mein Ziel ist es, es so zu kompilieren, dass es produziert .dll
und .lib
für Bibliotheken (da mein reales Projekt Links zu externen Bibliotheken enthält, die mit diesen Typen verteilt werden), mit Unterstützung für OpenMP 4.5 oder neuer, und dies über die Befehlszeile zu tun, damit es auf einem Docker für ausgeführt werden kann Testen und Überprüfen (der Docker-Teil fällt nicht in den Geltungsbereich dieser Frage, er dient nur als Referenz dafür, warum ich ihn für die Arbeit über die Befehlszeile benötige). Ich kann dieses Projekt mit verschiedenen Compilern kompilieren, mit denen ich nicht zufrieden bin:
- MSVC:
mkdir build-msvc
danncmake ..
(aus dem neu erstellten Ordner) und schließlichcmake --build . --config Release
. Dies lässt sich gut kompilieren, unterstützt jedoch nur OpenMP 2.0 und ist daher keine gute Option für mein reales Projekt. - Intel Parallel Studio:
mkdir build-intel
danncmake .. -T "Intel C++ Compiler 19.0"
(aus dem neu erstellten Ordner) und schließlichcmake --build . --config Release
. Dies unterstützt OpenMP 5.0, aber seine Lizenzen sind für mich ziemlich teuer. - MinGW x64 g ++ :
mkdir build-g++
, danncmake .. -G "MinGW Makefiles"
(aus dem neu erstellten Ordner) und schließlichcmake --build .
. Es unterstützt OpenMP 4.5, aber dieser Compiler ist nicht kompatibel mit.lib
(soweit ich weiß), was ich bereits erwähnt habe, ist für mich notwendig.
Ich habe erfolglos versucht, clang zu verwenden:
- CLANG von MSVC :
mkdir build-clang-msvc
, danncmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(aus dem neu erstellten Ordner), aber es schlägt mit dem folgenden Fehler fehl:
- Die CXX-Compiler-Identifikation lautet Clang 8.0.1 mit MSVC-ähnlicher Befehlszeile - Überprüfen Sie, ob der CXX-Compiler funktioniert: C: / Programme (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - Überprüfen Sie, ob der CXX-Compiler funktioniert: C: / Programme (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - defekt CMake-Fehler bei C: / Programme / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (Nachricht): Der C ++ - Compiler "C: / Programme (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe" kann kein einfaches Testprogramm kompilieren. Es schlägt mit der folgenden Ausgabe fehl: Ändern Sie Dir: C: / Users / [BENUTZERNAME] / source / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Führen Sie die Build-Befehle aus: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Erstellen des CXX-Objekts CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Verknüpfen der ausführbaren CXX-Datei cmTC_bd131.exe FEHLGESCHLAGEN: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ Programme \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - Manifeste - C: \ PROGRA ~ 1 \ MINGW- ~ 1 \ X86_64 ~ 1.0-P \ mingw64 \ bin \ ld.exe / nologo CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj /out:cmTC_bd131.exe / implib: cmTC_bd131.lib /pdb:cmTC_bd131.pdb /version:0.0 / machine: X86 / debug / INCREMENTAL / subsystem: Konsolenkernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comd .lib advapi32.lib && cd. " RC Pass 1: Befehl "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" fehlgeschlagen (Exit-Code 0) mit der folgenden Ausgabe: Die angegebene Datei wurde vom System nicht gefunden ninja: build gestoppt: Unterbefehl fehlgeschlagen. CMake kann dieses Projekt nicht korrekt generieren. Call Stack (letzter Anruf zuerst): CMakeLists.txt: 2 (Projekt) - Bei unvollständiger Konfiguration sind Fehler aufgetreten! Siehe auch "C: / Users / [USER NAME] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Siehe auch "C: / Users / [USER NAME] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang und Ninja abgesehen von MSVC :
mkdir build-clang-ninja
, danncmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(aus dem neu erstellten Ordner und Ändern derPATH
Umgebungsvariablen, sodass die Nicht-MSVC zuerst gefunden werden), aber es schlägt mit dem folgenden Fehler fehl:
- Die CXX-Compiler-Identifikation lautet Clang 9.0.0 mit MSVC-ähnlicher Befehlszeile - Überprüfen Sie, ob der CXX-Compiler funktioniert: C: / Programme / LLVM / bin / clang-cl.exe - Überprüfen Sie, ob der CXX-Compiler funktioniert: C: / Programme / LLVM / bin / clang-cl.exe - defekt CMake-Fehler bei C: / Programme / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (Nachricht): Der C ++ - Compiler "C: / Programme / LLVM / bin / clang-cl.exe" kann kein einfaches Testprogramm kompilieren. Es schlägt mit der folgenden Ausgabe fehl: Ändern Sie Dir: C: / Users / [BENUTZERNAME] / source / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Führen Sie die Build-Befehle aus: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Erstellen des CXX-Objekts CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Verknüpfen der ausführbaren CXX-Datei cmTC_50b73.exe FEHLGESCHLAGEN: cmTC_50b73.exe cmd.exe / C "cd. &&" C: \ Programme \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - Manifeste - CMAKE_LINKER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:cmTC_50b73.pdb /version:0. / deb / /: Subsystem: Konsole kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: Befehl "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" fehlgeschlagen (Exit-Code 0) mit der folgenden Ausgabe: Die angegebene Datei wurde vom System nicht gefunden ninja: build gestoppt: Unterbefehl fehlgeschlagen. CMake kann dieses Projekt nicht korrekt generieren. Call Stack (letzter Anruf zuerst): CMakeLists.txt: 2 (Projekt) - Bei unvollständiger Konfiguration sind Fehler aufgetreten! Siehe auch "C: / Users / [USER NAME] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Siehe auch "C: / Users / [USER NAME] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Irgendwelche Ideen, wie man mit dem Klirren umgeht? Ich denke, es ist meine beste Option für das, was ich erreichen möchte (kompiliere mein Testprogramm mit Unterstützung für OpenMP 4.5 oder neuer und produziere .lib
und .dll
).
Verwandte Beiträge / Webseiten, die ich überprüft habe, aber zur Lösung dieses Problems nicht hilfreich waren:
- Erstellen eines C ++ - Projekts unter Windows mit CMake, Clang und Ninja
- Bauen mit CMake, Ninja und Clang unter Windows
- Möglichkeiten zum Kompilieren mit Clang unter Windows , insbesondere Festlegen des Linkers:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- CMake-Erstellung für Windows (clang-cl) mit Ninja Generator
- Clang-cl Benutzerhandbuch
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Ich werde mich mit diesem neuen Fehler befassen und wenn ich keine Antwort finde, werde ich eine neue Frage stellen. Vielen Dank!