Saya punya proyek uji kecil yang menggunakan OpenMP untuk paralelisasi. Target saya adalah untuk mengkompilasinya sehingga menghasilkan .dll
dan .lib
untuk perpustakaan (karena tautan proyek saya yang sebenarnya ke perpustakaan eksternal yang didistribusikan menggunakan jenis ini), dengan dukungan untuk OpenMP 4.5 atau yang lebih baru dan melakukannya dari baris perintah sehingga dapat dilakukan pada buruh pelabuhan untuk menguji dan memeriksa (bagian buruh pelabuhan keluar dari ruang lingkup pertanyaan ini, itu hanya untuk referensi mengapa saya membutuhkannya untuk bekerja dari baris perintah). Saya dapat mengkompilasi proyek ini dengan kompiler yang berbeda dengan yang saya tidak senang:
- MSVC:,
mkdir build-msvc
lalucmake ..
(dari folder yang baru dibuat) dan akhirnyacmake --build . --config Release
. Ini mengkompilasi dengan baik tetapi hanya mendukung OpenMP 2.0, oleh karena itu bukan pilihan yang baik untuk proyek nyata saya. - Intel Parallel Studio:,
mkdir build-intel
lalucmake .. -T "Intel C++ Compiler 19.0"
(dari folder yang baru dibuat) dan akhirnyacmake --build . --config Release
. Ini mendukung OpenMP 5.0 tetapi lisensinya cukup mahal bagi saya. - MinGW x64 g ++:,
mkdir build-g++
lalucmake .. -G "MinGW Makefiles"
(dari folder yang baru dibuat) dan akhirnyacmake --build .
. Ini mendukung OpenMP 4.5 tetapi kompiler ini tidak kompatibel dengan.lib
(sejauh yang saya tahu) yang telah saya sebutkan diperlukan untuk saya.
Saya telah mencoba tanpa berhasil menggunakan dentang:
- CLANG dari MSVC:,
mkdir build-clang-msvc
thencmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(dari folder yang baru dibuat), tetapi gagal dengan kesalahan berikut:
- Identifikasi kompiler CXX adalah Dentang 8.0.1 dengan baris perintah seperti MSVC - Periksa apakah kompiler CXX berfungsi: C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Komunitas / VC / Tools / Llvm / bin / clang-cl.exe - Periksa apakah kompiler CXX berfungsi: C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Komunitas / VC / Tools / Llvm / bin / clang-cl.exe - rusak Kesalahan CMake di C: / Program Files / CMake / share / cmake-3.15 / Modul / CMakeTestCXXCompiler.cmake: 53 (pesan): Kompiler C ++ "C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Komunitas / VC / Alat / Llvm / bin / clang-cl.exe" tidak dapat menyusun program pengujian sederhana. Gagal dengan output berikut: Ubah Dir: C: / Pengguna / [NAMA PENGGUNA] / sumber / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Jalankan Bangun Perintah: C: /PROGRA ~ 2/MICROS ~ 1/2019/COMMUN ~ 1/Common7/IDE/COMMON ~ 1/MICROS ~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Membangun objek CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Menghubungkan cmX yang dapat dieksekusi cmTC_bd131.exe GAGAL: 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 - manifes - 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 /versiion.0.0 / mesin: X86 / debug / INCREMENTAL / subsistem: konsol kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32 .lib advapi32.lib && cd. " RC Pass 1: perintah "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" gagal (kode keluar 0) dengan output berikut: Sistem tidak dapat menemukan berkas yang dicari ninja: build stops: subcommand gagal. CMake tidak akan dapat menghasilkan proyek ini dengan benar. Penumpukan Panggilan (panggilan terakhir): CMakeLists.txt: 2 (proyek) - Mengonfigurasi tidak lengkap, terjadi kesalahan! Lihat juga "C: / Pengguna / [NAMA PENGGUNA] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Lihat juga "C: / Users / [USER NAME] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Dentang dan Ninja terpisah dari MSVC:,
mkdir build-clang-ninja
lalucmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(dari folder yang baru dibuat dan mengubahPATH
variabel lingkungan sehingga non-msvc ditemukan terlebih dahulu), tetapi gagal dengan kesalahan berikut:
- Identifikasi kompiler CXX adalah Dentang 9.0.0 dengan baris perintah seperti MSVC - Periksa apakah kompiler CXX berfungsi: C: / Program Files / LLVM / bin / clang-cl.exe - Periksa apakah kompiler CXX berfungsi: C: / Program Files / LLVM / bin / clang-cl.exe - rusak Kesalahan CMake di C: / Program Files / CMake / share / cmake-3.15 / Modul / CMakeTestCXXCompiler.cmake: 53 (pesan): Kompiler C ++ "C: / Program Files / LLVM / bin / clang-cl.exe" tidak dapat menyusun program pengujian sederhana. Gagal dengan output berikut: Ubah Dir: C: / Pengguna / [NAMA PENGGUNA] / sumber / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Jalankan Bangun Perintah: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Membangun objek CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Menautkan cmX yang dapat dieksekusi cmTC_50b73.exe GAGAL: 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 - manifes - 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 / mesin: debug subsistem: konsol kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: perintah "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" gagal (kode keluar 0) dengan output berikut: Sistem tidak dapat menemukan berkas yang dicari ninja: build stops: subcommand gagal. CMake tidak akan dapat menghasilkan proyek ini dengan benar. Penumpukan Panggilan (panggilan terakhir): CMakeLists.txt: 2 (proyek) - Mengonfigurasi tidak lengkap, terjadi kesalahan! Lihat juga "C: / Pengguna / [NAMA PENGGUNA] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Lihat juga "C: / Pengguna / [NAMA PENGGUNA] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Ada ide tentang bagaimana untuk melanjutkan dentang? Saya pikir itu adalah pilihan terbaik saya untuk apa yang ingin saya capai (mengkompilasi program pengujian saya dengan dukungan untuk OpenMP 4.5 atau yang lebih baru dan memproduksi .lib
dan .dll
).
Posting terkait / halaman web yang telah saya periksa tetapi tidak berguna untuk menyelesaikan ini:
- Membangun proyek c ++ pada Windows dengan CMake, Dentang dan Ninja
- Membangun dengan CMake, Ninja dan Dentang di Windows
- Cara untuk Mengkompilasi dengan Dentang pada Windows , secara khusus mengatur tautan:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- Bangunan CMake untuk Windows (clang-cl) menggunakan Ninja Generator
- Manual pengguna clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Saya akan menggali kesalahan baru ini dan jika saya tidak menemukan jawaban saya akan memposting pertanyaan baru. Terima kasih!Jawaban:
Saya bisa menduplikasi kesalahan ini untuk kasus Dentang + MSVC . Karena kami mencoba menggunakan kompiler yang dibuat Visual-Studio dari luar Visual Studio (yaitu baris perintah), maka perlu menginisialisasi lingkungan build VS di baris perintah kami sebelum menggunakan kompiler. The
VCVarsXX.bat
file mencapai hal ini; mereka adalah bagian dari alat Command Prompt VS. Jadi dengan memilih arsitektur Anda (x86
,,x64
dll) dan menjalankan skrip, ini akan memungkinkan CMake untuk membangun program pengujian sederhana denganclang-cl
dan melanjutkan. Di sinilah lokasinya untuk VS 2019:Untuk memperluas masalah OpenMP, saya pribadi merasa
find_package(OpenMP REQUIRED)
tidak berguna. Seperti yang Anda sebutkan, saya juga menerima kesalahan CMake ini:Ada beberapa saran di situs ini (misalnya di sini dan di sini ) mengklaim bahwa mengisi semua variabel secara manual memungkinkan
FindOpenMP.cmake
untuk berhasil menemukan perpustakaan. Saya mencoba ini dengan contoh file CMake Anda, dengan beberapa keberhasilan:Ini berhasil "menemukan" perpustakaan pada upaya konfigurasi CMake kedua (yang pertama selalu menghasilkan
Could NOT find OpenMP_CXX
kesalahan yang sama seperti sebelumnya):Namun , ini gagal membangun executable, karena tidak ada variabel CMake OpenMP (khususnya
OpenMP_CXX_LIBRARIES
) yang benar-benar menunjuk ke lokasi perpustakaan. Kekurangan CMakeFindOpenMP.cmake
telah diangkat di situs masalah CMake di sini , dan tampaknya ada batasan yang relevan pada akhir LLVM / Dentang juga.Bagaimanapun juga, cara terbersih saya untuk membuat contoh bekerja adalah dengan membuang
find_package()
semuanya. Berikut ini memungkinkan saya untuk berhasil menghasilkan sistem builds, dan mengkompilasi dan menjalankan executable:sumber
vcvarsall.bat
tidak menempatkan clang-cl di PATH untuk saya. Ada yang tahu kenapa?