Saya baru mengenal CMake dan agak bingung dengan kata kunci PUBLIK, PRIVATE, dan INTERFACE yang terkait target_link_libraries()
. Dokumentasi menyebutkan bahwa mereka dapat digunakan untuk menentukan dependensi tautan dan antarmuka tautan dalam satu perintah.
Apa sebenarnya arti dependensi tautan dan antarmuka tautan?
Jawaban:
Jika Anda membuat pustaka bersama dan file cpp sumber Anda #include header pustaka lain (Katakanlah, QtNetwork misalnya), tetapi file header Anda tidak menyertakan header QtNetwork, maka QtNetwork adalah
PRIVATE
ketergantungan.Jika file sumber dan header Anda menyertakan header pustaka lain, maka itu adalah
PUBLIC
ketergantungan.Jika file header Anda tetapi tidak file sumber Anda menyertakan header pustaka lain, maka itu adalah
INTERFACE
ketergantungan.Properti build
PUBLIC
danINTERFACE
dependensi lainnya disebarkan untuk menggunakan library. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirementssumber
PUBLIC
atauPRIVATE
penting? Apa yang berubah?PRIVATE
tidak menambahkan dependensi Anda ke proyek yang menautkan ke perpustakaan Anda. Ini lebih bersih dan juga menghindari kemungkinan konflik antara dependensi Anda dan pengguna Anda.PUBLIC
ketergantungan, bukan sebuahINTERFACE
ketergantungan.@steveire menerima jawaban yang bagus. Saya hanya ingin menambahkan tabel untuk melihat perbedaannya dengan cepat:
sumber