Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggabungkan Berbilang Perpustakaan Statik ke dalam Perpustakaan Tunggal Menggunakan CMake?
Menggabungkan Berbilang Perpustakaan Statik ke dalam Perpustakaan Tunggal Menggunakan CMake
Apabila membina projek yang bergantung pada banyak perpustakaan statik, adalah wajar untuk digabungkan perpustakaan ini menjadi satu unit untuk dikeluarkan. CMake mempunyai kaedah khusus untuk menggabungkan perpustakaan sasaran secara langsung, seperti target_link_libraries(), namun, ia mungkin tidak melakukan tindakan yang diingini dalam semua kes.
Pendekatan Sasaran Tersuai
Satu pendekatan melibatkan mewujudkan sasaran tersuai yang memanipulasi perpustakaan statik secara langsung. Dengan melaksanakan arahan seperti ar atau libtool, adalah mungkin untuk mengekstrak fail objek daripada perpustakaan individu dan kemudian menggabungkannya semula ke dalam satu arkib. Ini boleh dicapai melalui kod CMake berikut:
# Add the individual static libraries add_library(a a.cpp a.h) add_library(b b.cpp b.h) # Create the combined library target set(C_LIB ${CMAKE_BINARY_DIR}/libcombi.a) add_custom_target(combined COMMAND ar -x $<TARGET_FILE:a> COMMAND ar -x $<TARGET_FILE:b> COMMAND ar -qcs ${C_LIB} *.o WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b ) # Import the combined library add_library(c STATIC IMPORTED GLOBAL) add_dependencies(c combined) set_target_properties(c PROPERTIES IMPORTED_LOCATION ${C_LIB} ) # Link the combined library to the executable target_link_libraries(main c)
Kaedah ini secara berkesan mengagregatkan fail objek daripada perpustakaan individu ke dalam satu arkib, menyediakan gabungan perpustakaan yang diingini.
Pertimbangan Alternatif
Walaupun pendekatan sasaran tersuai mencapai objektif, mungkin terdapat pendekatan alternatif untuk dipertimbangkan. CMake menyediakan fungsi link_libraries(), yang berpotensi untuk memautkan berbilang perpustakaan ke dalam satu output. Selain itu, penyiasatan menggunakan fungsi add_library() dengan bendera OBJECT atau INTERFACE mungkin menawarkan penyelesaian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Perpustakaan Statik ke dalam Perpustakaan Tunggal Menggunakan CMake?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!