我有一个使用OpenMP进行并行化的小型测试项目。我的目标是对其进行编译,以使其生成.dll
并.lib
用于库(因为我的真实项目链接到使用这些类型分发的外部库),并且支持OpenMP 4.5或更高版本,并且可以从命令行进行操作,因此可以在docker上完成测试和检查(泊坞窗部分不在此问题的范围内,仅供参考,以说明为什么我需要它在命令行中工作)。我可以使用不满意的其他编译器来编译该项目:
- 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中进行CLANG:,
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-损坏 C:/程序文件/CMake/share/cmake-3.15/Modules/CMakeTestCXXCompiler.cmake处的CMake错误:53(消息): C ++编译器 “ C:/程序文件(x86)/ Microsoft Visual Studio / 2019 /社区/VC/Tools/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 / machine:X86 / debug / INCREMENTAL / subsystem:控制台kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32 .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 / [用户名] /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-损坏 C:/程序文件/CMake/share/cmake-3.15/Modules/CMakeTestCXXCompiler.cmake处的CMake错误:53(消息): C ++编译器 “ C:/程序文件/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 /version:0.0 / machine:x64 / debug / INCREMENTAL子系统:控制台kernel32.lib user32.lib gdi32.lib winspool.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 / [用户名] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log”。 另请参阅“ C:/ Users / [用户名] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log”。
关于如何继续使用clang的任何想法?我认为这是我想要实现的最佳选择(在支持OpenMP 4.5或更高版本的情况下编译测试程序并生成.lib
和.dll
)。
我检查过但对解决此问题无用的相关帖子/网页:
- 使用CMake,Clang和Ninja在Windows上构建c ++项目
- 在Windows上使用CMake,Ninja和Clang进行构建
- 在Windows上使用Clang进行编译的方法,特别是设置链接器:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- 使用Ninja Generator的Windows(clang-cl)CMake构建
- Clang-cl用户手册
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
。我将研究这个新错误,如果找不到答案,我将发布一个新问题。谢谢!