У мене є невеликий тестовий проект, який використовує 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). Я розберуся на цю нову помилку, і якщо я не знайду відповіді, опублікую нове запитання. Дякую!