Ho un piccolo progetto di test che utilizza OpenMP per la parallelizzazione. Il mio obiettivo è quello di compilarlo in modo che produca .dll
e .lib
per le librerie (perché il mio progetto reale si collega a librerie esterne distribuite utilizzando questi tipi), con supporto per OpenMP 4.5 o versioni successive e farlo dalla riga di comando in modo che possa essere eseguito su una finestra mobile per test e verifica (la parte della finestra mobile non rientra nell'ambito di questa domanda, è solo per riferimento sul motivo per cui ho bisogno che funzioni dalla riga di comando). Posso compilare questo progetto con diversi compilatori di cui non sono contento:
- MSVC:,
mkdir build-msvc
quindicmake ..
(dalla cartella appena creata) e infinecmake --build . --config Release
. Questo compila bene ma supporta solo OpenMP 2.0, quindi non è una buona opzione per il mio vero progetto. - Intel Parallel Studio:,
mkdir build-intel
quindicmake .. -T "Intel C++ Compiler 19.0"
(dalla cartella appena creata) e infinecmake --build . --config Release
. Questo supporta OpenMP 5.0 ma le sue licenze sono piuttosto costose per me. - MinGW x64 g ++:,
mkdir build-g++
quindicmake .. -G "MinGW Makefiles"
(dalla cartella appena creata) e infinecmake --build .
. Supporta OpenMP 4.5 ma questo compilatore non è compatibile con.lib
(per quanto ne so) che ho già menzionato è necessario per me.
Ho provato senza successo a usare clang:
- CLANG da MSVC:,
mkdir build-clang-msvc
quindicmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(dalla cartella appena creata), ma non riesce con il seguente errore:
- L'identificazione del compilatore CXX è Clang 8.0.1 con riga di comando simile a MSVC - Controlla il compilatore CXX funzionante: C: / Programmi (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - Controlla il compilatore CXX funzionante: C: / Programmi (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - rotto Errore CMake in C: / Programmi / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (messaggio): Il compilatore C ++ "C: / Programmi (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe" non è in grado di compilare un semplice programma di test. Non riesce con il seguente output: Cambia Dir: C: / Users / [NOME UTENTE] / source / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Esegui comando / i build: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Creazione dell'oggetto CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Collegamento dell'eseguibile CXX cmTC_bd131.exe NON RIUSCITO: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ Programmi \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifests - 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 / sottosistema: console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32 .lib advapi32.lib && cd. " RC Pass 1: comando "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" non riuscito (codice di uscita 0) con il seguente output: Il sistema non trova il file specificato ninja: build arrestato: sottocomando non riuscito. CMake non sarà in grado di generare correttamente questo progetto. Call Stack (prima la chiamata più recente): CMakeLists.txt: 2 (progetto) - Configurazione incompleta, si sono verificati errori! Vedi anche "C: / Users / [NOME UTENTE] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Vedi anche "C: / Users / [NOME UTENTE] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang e Ninja oltre a MSVC:,
mkdir build-clang-ninja
quindicmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(dalla cartella appena creata e cambiando laPATH
variabile ambientale in modo che i non-msvc vengano trovati per primi), ma fallisce con il seguente errore:
- L'identificazione del compilatore CXX è Clang 9.0.0 con riga di comando simile a MSVC - Verificare il funzionamento del compilatore CXX: C: / Programmi / LLVM / bin / clang-cl.exe - Controlla il compilatore CXX funzionante: C: / Programmi / LLVM / bin / clang-cl.exe - rotto Errore CMake in C: / Programmi / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (messaggio): Il compilatore C ++ "C: / Programmi / LLVM / bin / clang-cl.exe" non è in grado di compilare un semplice programma di test. Non riesce con il seguente output: Cambia Dir: C: / Users / [NOME UTENTE] / source / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Esegui comando / i build: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Creazione oggetto CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Collegamento dell'eseguibile CXX cmTC_50b73.exe NON RIUSCITO: cmTC_50b73.exe cmd.exe / C "cd. &&" C: \ Programmi \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifests - 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.0 / machine: INC64 / deb / sottosistema: console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: comando "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" non riuscito (codice di uscita 0) con il seguente output: Il sistema non trova il file specificato ninja: build arrestato: sottocomando non riuscito. CMake non sarà in grado di generare correttamente questo progetto. Call Stack (prima la chiamata più recente): CMakeLists.txt: 2 (progetto) - Configurazione incompleta, si sono verificati errori! Vedi anche "C: / Users / [NOME UTENTE] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Vedi anche "C: / Users / [NOME UTENTE] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Qualche idea su come procedere con il clang? Penso che sia la mia migliore opzione per quello che voglio ottenere (compilare il mio programma di test con il supporto per OpenMP 4.5 o versioni successive e di produzione .lib
e .dll
).
Post / pagine Web correlati che ho controllato ma non sono stati utili per risolvere questo problema:
- Creazione di un progetto c ++ su Windows con CMake, Clang e Ninja
- Costruire con CMake, Ninja e Clang su Windows
- Modi per compilare con Clang su Windows , impostando specificamente il linker:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- CMake building per Windows (clang-cl) usando Ninja Generator
- Manuale utente di Clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Scaverò in questo nuovo errore e se non trovo una risposta, inserirò una nuova domanda. Grazie!