У меня есть небольшой тестовый проект, который использует 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:
- CLANG из MSVC:,
mkdir build-clang-msvcзатемcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(из вновь созданной папки), но он завершается ошибкой со следующей ошибкой:
- Идентификатор компилятора CXX - Clang 8.0.1 с MSVC-подобной командной строкой
- Проверьте работающий компилятор CXX: C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe
- Проверьте работоспособность компилятора CXX: C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - не работает
Ошибка CMake в C: / Program Files / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (сообщение):
Компилятор C ++
"C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Сообщество / VC / Инструменты / Llvm / bin / clang-cl.exe"
не может скомпилировать простую тестовую программу.
Это терпит неудачу со следующим выводом:
Изменить каталог: C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] / source / 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] Связывание исполняемого файла CXX cmTC_bd131.exe
СБОЙ: cmTC_bd131.exe
cmd.exe / C "cd. &&" C: \ Program Files \ 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:0.0 / машина: X86 / debug / INCREMENTAL / подсистема: консоль kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib com-ud .lib advapi32.lib && cd. "
Проход RC 1: команда "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" завершилась неудачно (код выхода 0) со следующим выводом:
Система не может найти указанный файл
ниндзя: сборка остановлена: подкоманда не выполнена.
CMake не сможет правильно сгенерировать этот проект.
Стек вызовов (самый последний вызов сначала):
CMakeLists.txt: 2 (проект)
- Настройка неполная, произошли ошибки!
См. Также «C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log».
Смотрите также «C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] /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: / Program Files / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (сообщение):
Компилятор C ++
"C: / Program Files / LLVM / bin / clang-cl.exe"
не может скомпилировать простую тестовую программу.
Это терпит неудачу со следующим выводом:
Изменить каталог: C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] / source / 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] Связывание исполняемого файла CXX cmTC_50b73.exe
СБОЙ: cmTC_50b73.exe
cmd.exe / C "cd. &&" C: \ Program Files \ 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 / версия_версии / 0 / машина: x64 Подсистема: консоль kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. "
Проход RC 1: команда «rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc» завершилась неудачно (код выхода 0) со следующим выводом:
Система не может найти указанный файл
ниндзя: сборка остановлена: подкоманда не выполнена.
CMake не сможет правильно сгенерировать этот проект.
Стек вызовов (самый последний вызов сначала):
CMakeLists.txt: 2 (проект)
- Настройка неполная, произошли ошибки!
См. Также «C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log».
См. Также «C: / Users / [ИМЯ ПОЛЬЗОВАТЕЛЯ] /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). Я буду копаться в этой новой ошибке, и если я не найду ответ, я отправлю новый вопрос. Спасибо!