Eu tenho um pequeno projeto de teste que usa o OpenMP para paralelização. Meu objetivo é compilá-lo para que ele produza .dlle .libpara bibliotecas (porque meu projeto real vincula-se a bibliotecas externas distribuídas usando esses tipos), com suporte ao OpenMP 4.5 ou mais recente e faça-o na linha de comando para que possa ser feito em uma janela de encaixe para teste e verificação (a parte do docker está fora do escopo desta pergunta, é apenas para referência sobre por que eu preciso que ela funcione na linha de comando). Posso compilar este projeto com diferentes compiladores com os quais não estou feliz:
- MSVC:,
mkdir build-msvcentãocmake ..(da pasta recém-criada) e finalmentecmake --build . --config Release. Isso compila bem, mas suporta apenas o OpenMP 2.0, portanto, não é uma boa opção para o meu projeto real. - Intel Parallel Studio:,
mkdir build-intelentãocmake .. -T "Intel C++ Compiler 19.0"(da pasta recém-criada) e finalmentecmake --build . --config Release. Isso suporta o OpenMP 5.0, mas suas licenças são muito caras para mim. - MinGW x64 g ++:,
mkdir build-g++entãocmake .. -G "MinGW Makefiles"(da pasta recém-criada) e finalmentecmake --build .. Ele suporta o OpenMP 4.5, mas este compilador não é compatível com.lib(até onde eu sei), o que eu já mencionei, é necessário para mim.
Eu tentei sem sucesso usar o clang:
- CLANG do MSVC:,
mkdir build-clang-msvcthencmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(da pasta recém-criada), mas falha com o seguinte erro:
- A identificação do compilador CXX é Clang 8.0.1 com linha de comando semelhante ao MSVC
- Verifique se o compilador CXX está funcionando: C: / Arquivos de Programas (x86) / Microsoft Visual Studio / 2019 / Community / VC / Tools / Llvm / bin / clang-cl.exe
- Verifique se o compilador CXX está funcionando: C: / Arquivos de Programas (x86) / Microsoft Visual Studio / 2019 / Comunidade / VC / Ferramentas / Llvm / bin / clang-cl.exe - quebrado
Erro do CMake em C: / Arquivos de Programas / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (message):
O compilador C ++
"C: / Arquivos de Programas (x86) / Microsoft Visual Studio / 2019 / Comunidade / VC / Ferramentas / Llvm / bin / clang-cl.exe"
não é capaz de compilar um programa de teste simples.
Falha com a seguinte saída:
Alterar diretório: C: / Users / [NOME DO USUÁRIO] / source / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp
Executar comando (s) de compilação: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Criando o objeto CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj
[2/2] Vinculando o executável CXX cmTC_bd131.exe
FAILED: cmTC_bd131.exe
cmd.exe / C "cd. &&" C: \ Arquivos de Programas \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifestos - C: \ PROGRA ~ 1 \ MINGW- ~ 1 \ X86_64 ~ 1.0-P \ mingw64 \ bin \ ld.exe / não CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj /out:cmTC_bd131.exe / implib: cmTC_bd131.lib /pdb:cmTC_bd131.pdb /versionAdd.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: comando "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" falhou (código de saída 0) com a seguinte saída:
O sistema não pode encontrar o arquivo especificado
ninja: build parado: subcomando falhou.
O CMake não poderá gerar corretamente este projeto.
Pilha de chamadas (chamada mais recente primeiro):
CMakeLists.txt: 2 (projeto)
- Configurando incompleto, ocorreram erros!
Consulte também "C: / Users / [NOME DO USUÁRIO] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log".
Consulte também "C: / Users / [NOME DO USUÁRIO] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang e Ninja, além do MSVC:,
mkdir build-clang-ninjathencmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(da pasta recém-criada e alterando aPATHvariável de ambiente para que os não-msvc sejam encontrados primeiro), mas falha com o seguinte erro:
- A identificação do compilador CXX é Clang 9.0.0 com linha de comando semelhante ao MSVC
- Verifique se o compilador CXX está funcionando: C: / Arquivos de Programas / LLVM / bin / clang-cl.exe
- Verifique se o compilador CXX está funcionando: C: / Arquivos de Programas / LLVM / bin / clang-cl.exe - quebrado
Erro do CMake em C: / Arquivos de Programas / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake: 53 (message):
O compilador C ++
"C: / Arquivos de Programas / LLVM / bin / clang-cl.exe"
não é capaz de compilar um programa de teste simples.
Falha com a seguinte saída:
Alterar diretório: C: / Users / [NOME DO USUÁRIO] / source / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp
Executar comando (s) de compilação: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Criando o objeto CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj
[2/2] Vinculando o executável CXX cmTC_50b73.exe
FAILED: cmTC_50b73.exe
cmd.exe / C "cd. &&" C: \ Arquivos de Programas \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifestos - CMAKE_LINKER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:cmTC_50b73.pdb /versionified.0 / machine: x64 / debug subsistema: 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" falhou (código de saída 0) com a seguinte saída:
O sistema não pode encontrar o arquivo especificado
ninja: build parado: subcomando falhou.
O CMake não poderá gerar corretamente este projeto.
Pilha de chamadas (chamada mais recente primeiro):
CMakeLists.txt: 2 (projeto)
- Configurando incompleto, ocorreram erros!
Consulte também "C: / Users / [NOME DO USUÁRIO] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log".
Consulte também "C: / Users / [NOME DO USUÁRIO] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Alguma idéia de como proceder com o clang? Eu acho que é a minha melhor opção para o que eu quero alcançar (compile meu programa de teste com suporte ao OpenMP 4.5 ou mais recente e produza .libe .dll).
Postagens / páginas da web relacionadas que verifiquei, mas que não foram úteis para resolver isso:
- Criando projeto c ++ no Windows com CMake, Clang e Ninja
- Construindo com o CMake, Ninja e Clang no Windows
- Maneiras de compilar com o Clang no Windows , definindo especificamente o vinculador:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe" - Construção do CMake para Windows (clang-cl) usando o Ninja Generator
- Manual do usuário Clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES). Analisarei esse novo erro e, se não encontrar uma resposta, postarei uma nova pergunta. Obrigado!