Tengo un pequeño proyecto de prueba que usa OpenMP para la paralelización. Mi objetivo es compilarlo para que produzca .dll
y .lib
para bibliotecas (porque mi proyecto real se vincula a bibliotecas externas distribuidas usando estos tipos), con soporte para OpenMP 4.5 o posterior y hacerlo desde la línea de comandos para que se pueda hacer en un acoplador para prueba y verificación (la parte del acoplador está fuera del alcance de esta pregunta, es solo una referencia de por qué necesito que funcione desde la línea de comandos). Puedo compilar este proyecto con diferentes compiladores con los que no estoy contento:
- MSVC:,
mkdir build-msvc
luegocmake ..
(desde la carpeta recién creada) y finalmentecmake --build . --config Release
. Esto compila bien pero solo es compatible con OpenMP 2.0, por lo tanto, no es una buena opción para mi proyecto real. - Intel Parallel Studio:,
mkdir build-intel
luegocmake .. -T "Intel C++ Compiler 19.0"
(desde la carpeta recién creada) y finalmentecmake --build . --config Release
. Esto es compatible con OpenMP 5.0, pero sus licencias son bastante caras para mí. - MinGW x64 g ++:,
mkdir build-g++
luegocmake .. -G "MinGW Makefiles"
(desde la carpeta recién creada) y finalmentecmake --build .
. Es compatible con OpenMP 4.5 pero este compilador no es compatible con.lib
(que yo sepa) que ya mencioné es necesario para mí.
He intentado sin éxito utilizar clang:
- CLANG desde MSVC:,
mkdir build-clang-msvc
luegocmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(desde la carpeta recién creada), pero falla con el siguiente error:
- La identificación del compilador CXX es Clang 8.0.1 con línea de comandos similar a MSVC - Compruebe si funciona el compilador CXX: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - Compruebe si funciona el compilador CXX: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe - roto Error de CMake en C: / Archivos de programa / CMake / share / cmake-3.15 / Módulos / CMakeTestCXXCompiler.cmake: 53 (mensaje): El compilador de C ++ "C: / Archivos de programa (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe" no puede compilar un programa de prueba simple. Falla con el siguiente resultado: Cambiar Dir: C: / Usuarios / [NOMBRE DE USUARIO] / source / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Ejecutar comandos de compilación: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Creación de objetos CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Vinculación del ejecutable CXX cmTC_bd131.exe FALLIDO: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ Archivos de programa \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifiestos: 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: 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: el comando "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" falló (código de salida 0) con el siguiente resultado: El sistema no puede encontrar el archivo especificado ninja: compilación detenida: el subcomando falló. CMake no podrá generar correctamente este proyecto. Pila de llamadas (la llamada más reciente primero): CMakeLists.txt: 2 (proyecto) - ¡Configuración incompleta, se produjeron errores! Consulte también "C: / Usuarios / [NOMBRE DE USUARIO] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Consulte también "C: / Usuarios / [NOMBRE DE USUARIO] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang y Ninja, aparte de MSVC:,
mkdir build-clang-ninja
luegocmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(desde la carpeta recién creada y cambiando laPATH
variable de entorno para que los que no sean msvc se encuentren primero), pero falla con el siguiente error:
- La identificación del compilador CXX es Clang 9.0.0 con línea de comandos similar a MSVC - Compruebe si funciona el compilador CXX: C: / Archivos de programa / LLVM / bin / clang-cl.exe - Compruebe si funciona el compilador CXX: C: / Archivos de programa / LLVM / bin / clang-cl.exe - roto Error de CMake en C: / Archivos de programa / CMake / share / cmake-3.15 / Módulos / CMakeTestCXXCompiler.cmake: 53 (mensaje): El compilador de C ++ "C: / Archivos de programa / LLVM / bin / clang-cl.exe" no puede compilar un programa de prueba simple. Falla con el siguiente resultado: Cambiar Dir: C: / Usuarios / [NOMBRE DE USUARIO] / source / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Ejecute los comandos de compilación: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Construyendo objetos CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Vinculación del ejecutable CXX cmTC_50b73.exe FALLIDO: cmTC_50b73.exe cmd.exe / C "cd. &&" C: \ Archivos de programa \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifiestos: 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: x64 / debug / machine: x64 / debug / machine: INC64MENT / debug subsistema: consola kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ". RC Pass 1: el comando "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" falló (código de salida 0) con el siguiente resultado: El sistema no puede encontrar el archivo especificado ninja: compilación detenida: el subcomando falló. CMake no podrá generar correctamente este proyecto. Pila de llamadas (la llamada más reciente primero): CMakeLists.txt: 2 (proyecto) - ¡Configuración incompleta, se produjeron errores! Consulte también "C: / Usuarios / [NOMBRE DE USUARIO] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Consulte también "C: / Usuarios / [NOMBRE DE USUARIO] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
¿Alguna idea sobre cómo proceder con el sonido metálico? Creo que es mi mejor opción para lo que quiero lograr (compilar mi programa de prueba con soporte para OpenMP 4.5 o posterior y producir .lib
y .dll
).
Publicaciones / páginas web relacionadas que he verificado pero que no han sido útiles para resolver esto:
- Creación de un proyecto c ++ en Windows con CMake, Clang y Ninja
- Construyendo con CMake, Ninja y Clang en Windows
- Formas de compilar con Clang en Windows , configurando específicamente el vinculador:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- CMake building para Windows (clang-cl) usando Ninja Generator
- Manual de usuario de Clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Investigaré este nuevo error y si no encuentro una respuesta, publicaré una nueva pregunta. ¡Gracias!