並列化にOpenMPを使用する小さなテストプロジェクトがあります。私の目標は、OpenMP 4.5以降のサポートを備えたライブラリ(これらのタイプを使用して配布された外部ライブラリへの実際のプロジェクトリンクのため)を生成.dll
し.lib
てライブラリ用にコンパイルし、コマンドラインから実行して、Dockerで実行できるようにすることですテストとチェック(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コンパイラIDは、MSVCに似たコマンドラインを備えたClang 8.0.1です。 -動作する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-broken C:/ Program Files / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake:53(メッセージ)でのCMakeエラー: C ++コンパイラ 「C:/ Program Files(x86)/ Microsoft Visual Studio / 2019 / Community / 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:console 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_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」もご覧ください。
- クランと忍者離れMSVCから:
mkdir build-clang-ninja
、その後、cmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(新しく作成したフォルダから、変化するPATH
非MSVCが最初に発見されているように、環境変数)が、それは次のエラーで失敗します。
-CXXコンパイラIDは、MSVCに似たコマンドラインを備えたClang 9.0.0です。 -動作しているCXXコンパイラを確認します:C:/ Program Files / LLVM / bin / clang-cl.exe -動作しているCXXコンパイラを確認します:C:/ Program Files / LLVM / bin / clang-cl.exe-壊れています C:/ Program Files / CMake / share / cmake-3.15 / Modules / CMakeTestCXXCompiler.cmake:53(メッセージ)でのCMakeエラー: 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 /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パス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」もご覧ください。
clangの進め方に関するアイデアはありますか?私はそれが私が達成(OpenMPの4.5以降をサポートし、生産と私のテストプログラムをコンパイルしたいもののために私の最良の選択肢だと思う.lib
と.dll
)。
私がチェックしたが、これを解決するために役に立たなかった関連の投稿/ウェブページ:
- CMake、Clang、Ninjaを使用したWindowsでのC ++プロジェクトの構築
- WindowsでのCMake、忍者、Clangを使用したビルド
- WindowsでClangを使用してコンパイルする方法、特にリンカーを設定する方法:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- Ninja Generatorを使用したWindows用のCMakeビルド(clang-cl)
- Clang-clユーザーマニュアル
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
ます:。この新しいエラーを掘り下げて、答えが見つからない場合は、新しい質問を投稿します。ありがとうございました!