GNU/Linux >> Belajar Linux >  >> Linux

Cmake di Windows tidak menambahkan jalur pustaka bersama (berfungsi di linux)

Windows tidak memiliki beberapa konsep yang diperlukan untuk memungkinkan CMake menyiapkan lingkungan build Anda. Saat menautkan Windows akan mencari di direktori yang sama dengan biner, lalu mencari direktori di PATH Anda. Tidak ada yang seperti RPATH, yang digunakan pada sebagian besar platform Unix, untuk menyuntikkan jalur lain yang lebih sesuai. DLL umumnya harus diinstal bersama binari Anda, di direktori yang sama.

Menurut pendapat saya, praktik terbaik di Windows adalah meletakkan DLL di sebelah binari Anda. CMake mencoba untuk membuat ini lebih mudah,

install(TARGETS MyTarget
  EXPORT "MyProjectTargets"
  RUNTIME DESTINATION "${INSTALL_RUNTIME_DIR}"
  LIBRARY DESTINATION "${INSTALL_LIBRARY_DIR}"
  ARCHIVE DESTINATION "${INSTALL_ARCHIVE_DIR}")

akan menginstal DLL ke tujuan RUNTIME, tetapi meletakkan lib di tujuan PERPUSTAKAAN. Ini berarti bahwa biasanya pada lib OS mirip Unix memiliki objek yang dibagikan, tetapi CMake tahu bahwa DLL adalah runtime yang efektif dan akan masuk bin. Semoga ini membuat semuanya menjadi lebih jelas. CMake/Eclipse tidak mungkin benar-benar meningkatkan sebanyak ini, lebih dari mungkin menyuntikkan direktori tambahan ke PATH Anda saat mengeklik jalankan dari Eclipse (tidak yakin apakah itu mungkin).

Jika Anda khawatir dengan susunan bangunan, berikut ini akan bekerja dengan baik di sana (seperti yang disarankan dalam komentar di bawah):

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

Jika Anda ingin mengizinkan ini diganti (bisa berguna), mereka harus dilindungi dengan blok if(NOT var_name) juga.


Hanya jawaban yang mungkin untuk pertanyaan saya sendiri. Saya pikir di linux rpath digunakan untuk mengidentifikasi lokasi perpustakaan dependen tetapi di windows dengan mingw saya tidak bisa menggunakan elf parser sehingga tidak bisa menggunakan rpath.


Linux
  1. Windows – Folder Bersama Antara Qemu Windows Guest dan Linux Host?

  2. Pengantar Pustaka Bersama Linux (Cara Membuat Pustaka Bersama)

  3. Bagaimana Mengakses Folder Bersama Windows dari Linux?

  1. Cara mengatur googleTest sebagai perpustakaan bersama di Linux

  2. Bagaimana cara menambahkan file .so ke java.library.path di Linux

  3. Pembuatan lintas platform di bawah Windows yang menargetkan Linux menggunakan CMake

  1. Tambahkan disk ke volume bersama kluster di kluster failover Windows

  2. C++ Dynamic Shared Library di Linux

  3. Menautkan perpustakaan bersama dengan lib bersama lainnya di linux