У мене є невеликий тестовий проект, який використовує OpenMP для паралелізації. Моя мета - компілювати його, щоб він створював .dll
і .lib
для бібліотек (тому що мої реальні посилання на проект на зовнішні бібліотеки, що поширюються за допомогою цих типів), з підтримкою OpenMP 4.5 або новіших версій і робити це з командного рядка, щоб це можна було зробити на докері для тестування та перевірка (докерська частина виходить за рамки цього питання, саме для ознайомлення, чому мені це потрібно для роботи з командного рядка). Я можу скласти цей проект з різними компіляторами, з якими я не задоволений:
- MSVC:,
mkdir build-msvc
потімcmake ..
(із щойно створеної папки) і нарештіcmake --build . --config Release
. Це добре поєднує, але підтримує лише OpenMP 2.0, тому це не гарний варіант для мого реального проекту. - Intel Parallel Studio:,
mkdir build-intel
потімcmake .. -T "Intel C++ Compiler 19.0"
(із новоствореної папки) і нарештіcmake --build . --config Release
. Він підтримує OpenMP 5.0, але його ліцензії для мене досить дорогі. - MinGW x64 g ++:,
mkdir build-g++
потімcmake .. -G "MinGW Makefiles"
(із новоствореної папки) і нарештіcmake --build .
. Він підтримує OpenMP 4.5, але цей компілятор не сумісний з.lib
(наскільки я знаю), про що я вже згадував, мені потрібен.
Я без успіху намагався використовувати кланг:
- CLANG від MSVC:,
mkdir build-clang-msvc
потімcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(із новоствореної папки), але вона не працює із наступною помилкою:
- Ідентифікація компілятора CXX - Clang 8.0.1 з командним рядком, схожим на MSVC - Перевірте, чи працює компілятор CXX: C: / Файли програми (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - Перевірте наявність компілятора CXX: C: / Файли програми (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - зламано Помилка CMake на C: / Програмні файли / CMake / share / cmake-3.15 / Модулі / CMakeTestCXXCompiler.cmake: 53 (повідомлення): Компілятор C ++ "C: / Файли програми (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe" не в змозі скласти просту програму тестування. Виходить з ладу наступний вихід: Змінити Dir: C: / Користувачі / [Ім'я користувача] / джерело / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Запустіть команду збірки: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Створення об’єкта CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Пов’язання виконуваного файлу cmx__dd31.exe CXX ПОМИЛО: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ програмні файли \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - маніфести - 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:1.0 / машина: X86 / debug / INCREMENTAL / підсистема: консоль kernel32.lib user32.lib gdi32.lib winpool.lib shell32.lib ole32.lib oleaut32.lib udid.lib .lib advapi32.lib && cd. " RC Pass 1: команда "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" не вдалося (код виходу 0) із наступним виходом: Система не може знайти вказаний файл ninja: збірка зупинена: підкоманда не вдалася. CMake не зможе правильно генерувати цей проект. Стек викликів (перший останній дзвінок перший): CMakeLists.txt: 2 (проект) - Налаштування неповних, сталися помилки! Дивіться також "C: / Users / [NAME NAME] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Дивіться також "C: / Users / [NAME NAME] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang і Ninja, крім MSVC:,
mkdir build-clang-ninja
тодіcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(із новоствореної папки та зміниPATH
змінної середовища, щоб спочатку знаходилися не-msvc), але вона не вдається зі наступною помилкою:
- Ідентифікація компілятора CXX - Clang 9.0.0 з командним рядком, схожим на MSVC - Перевірте, чи працює компілятор CXX: C: / Program Files / LLVM / bin / clang-cl.exe - Перевірте, чи працює компілятор CXX: C: / Program Files / LLVM / bin / clang-cl.exe - зламаний Помилка CMake на C: / Програмні файли / CMake / share / cmake-3.15 / Модулі / CMakeTestCXXCompiler.cmake: 53 (повідомлення): Компілятор C ++ "C: / програмні файли / LLVM / bin / clang-cl.exe" не в змозі скласти просту програму тестування. Виходить з ладу наступний вихід: Змінити Dir: C: / Користувачі / [Ім'я користувача] / джерело / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Запустіть команду збирання: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Створення об'єкта CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Пов’язання виконуваного файлу cmx_mc_50b73.exe CXX ПОМИЛО: cmTC_50b73.exe cmd.exe / C "cd. &&" C: \ програмні файли \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - маніфести - CMAKE_LINKER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:cmTC_50b73.pdb /version64.0 / машина: INALX / 0 / INX64.0 / gb / ver6464 de / машина / 2.0 / підсистема: консоль kernel32.lib user32.lib gdi32.lib winpool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: команда "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" не вдалося (код виходу 0) із наступним виходом: Система не може знайти вказаний файл ninja: збірка зупинена: підкоманда не вдалася. CMake не зможе правильно генерувати цей проект. Стек викликів (перший останній дзвінок перший): CMakeLists.txt: 2 (проект) - Налаштування неповних, сталися помилки! Дивіться також "C: / Users / [NAME NAME] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Дивіться також "C: / Users / [NAME NAME] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Будь-які ідеї, як продовжувати кланг? Я вважаю, що це найкращий варіант для того, що я хочу досягти (складіть свою тестову програму з підтримкою OpenMP 4.5 або новішої версії та створення .lib
та .dll
).
Пов’язані публікації / веб-сторінки, які я перевірив, але не корисні для вирішення цього питання:
- Створення проекту c ++ на Windows за допомогою CMake, Clang та Ninja
- Будівництво з CMake, Ninja та Clang на Windows
- Способи компіляції з Clang у Windows , спеціально встановивши лінкер:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- Створення CMake для Windows (clang-cl) за допомогою Ninja Generator
- Посібник користувача Clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Я розберуся на цю нову помилку, і якщо я не знайду відповіді, опублікую нове запитання. Дякую!