GNU/Linux >> Belajar Linux >  >> Linux

Membuat file CMakeLists dari Makefile yang ada

Seperti ini:

target_link_libraries(your-target-name pthread boost_thread-mt etc)

Anda sebaiknya tidak menggunakan add_dependencies saat ingin menautkan pustaka. Menautkan menyiratkan ketergantungan, tetapi ketergantungan saja tidak akan cukup saat Anda perlu menautkan.


Sayangnya, tidak ada konversi langsung 1:1 dari Makefiles ke CMakeLists. Karena CMake seharusnya berjalan di semua platform, CMake tidak dapat bergantung pada asumsi khusus platform seperti yang dilakukan GNU, yang memperumit berbagai hal di tempat tertentu.

Secara khusus, CMake menawarkan mekanisme yang sangat kuat dan agak rumit untuk menggunakan pustaka:Anda memanggil find_package dengan nama pustaka Anda, yang akan memanggil skrip pencarian pustaka dari jalur modul cmake Anda. Skrip ini (yang juga ditulis dalam CMake) akan mencoba mendeteksi lokasi file header dan lib library dan menyimpannya dalam beberapa variabel CMake yang kemudian dapat diteruskan ke perintah CMake yang sesuai seperti include_directories dan target_link_libraries.

Ada dua masalah dengan pendekatan ini:Pertama, Anda memerlukan skrip pencarian. Untungnya, CMake dikirimkan dengan skrip pencarian untuk Pthreads, Boost, dan beberapa lainnya, tetapi jika Anda menggunakan perpustakaan yang lebih eksotis, Anda mungkin harus menulis sendiri skrip pencarian, yang merupakan pengalaman misterius pada awalnya...

Masalah besar kedua adalah bahwa tidak ada cara standar untuk skrip pencarian untuk mengembalikan hasilnya. Meskipun ada konvensi penamaan untuk variabel yang digunakan, hal itu seringkali tidak berlaku. Dalam praktiknya itu berarti Anda harus memeriksa sumber skrip pencarian untuk mengetahui cara menggunakannya. Untungnya, sebagian besar skrip yang disertakan dengan CMake didokumentasikan dengan sangat baik.

Skrip bawaan terletak di suatu tempat seperti <cmake-install-prefix>/share/cmake-2.8/Modules . Untuk pertanyaan Anda, lihat file FindBoost.cmake dan FindThreads.cmake (CMake akan secara otomatis tertaut dengan pustaka standar). Anycorn telah memberikan beberapa contoh kode untuk menggunakan skrip Boost, hal lain yang perlu Anda ketahui ada di dokumentasi CMake atau langsung di file skrip pencarian.


Dengan Boost, Anda benar-benar perlu menggunakan pencari paket

  set(Boost_ADDITIONAL_VERSIONS "1.46" "1.46.0" "1.46.1")
  set(Boost_USE_MULTITHREADED ON) # for -mt
  find_package(Boost COMPONENTS thread)
  if(Boost_FOUND)
    MESSAGE(STATUS "Found Boost: ${Boost_LIBRARY_DIRS}")
    MESSAGE(STATUS "Found Boost libraries: ${Boost_LIBRARIES}")
    set(LIBRARIES "${LIBRARIES};${Boost_LIBRARIES}")
  else()
    MESSAGE(FATAL_ERROR "Boost Thread NOT FOUND")
  endif()

target_link_libraries(executable ${LIBRARIES})

Linux
  1. Bagaimana cara membuat file di Linux dari jendela terminal?

  2. Buat PEM dari file PPK

  3. xauth tidak membuat file .Xauthority

  1. Cara menemukan File di Linux

  2. Memfilter tcpdump:Membuat keteraturan dari kekacauan

  3. Panduan pemula untuk membuat pengalihan dalam file .htaccess

  1. Membuat file CSR sertifikat web.

  2. Bagaimana Cara Cat File Dari Awk?

  3. Awk Dari Baris Yang Berbeda?