Dalam senario pembangunan perisian, adalah perkara biasa untuk mempunyai berbilang perpustakaan statik yang berfungsi sebagai kebergantungan untuk projek yang lebih besar. Untuk menyelaraskan pengedaran dan mengurangkan kerumitan pengurusan pergantungan, mungkin wajar untuk menggabungkan perpustakaan ini menjadi satu perpustakaan statik. CMake menawarkan beberapa pendekatan untuk mencapai matlamat ini.
Satu pendekatan ialah memanfaatkan arahan target_link_libraries. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa arahan ini hanya menambah perpustakaan yang ditentukan sebagai kebergantungan pautan, ia tidak menggabungkannya ke dalam satu pustaka.
Untuk penyelesaian yang lebih lancar, pertimbangkan untuk menggunakan sasaran tersuai bersama-sama dengan ar perintah. Berikut ialah contoh skrip CMake yang menunjukkan pendekatan ini:
cmake_minimum_required(VERSION 2.8.7) add_library(b b.cpp b.h) add_library(a a.cpp a.h) add_executable(main main.cpp) 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 ) add_library(c STATIC IMPORTED GLOBAL) add_dependencies(c combined) set_target_properties(c PROPERTIES IMPORTED_LOCATION ${C_LIB} ) target_link_libraries(main c)
Skrip ini membina dua perpustakaan statik (a dan b) dan boleh laku (utama) yang bergantung pada gabungan perpustakaan (c). Sasaran tersuai gabungan menggunakan perintah ar untuk mengekstrak fail objek daripada perpustakaan individu dan menggabungkannya menjadi c.a.
Sebagai alternatif, pertimbangkan untuk menggunakan libtool Apple untuk melaksanakan gabungan:
add_custom_target(combined COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b )
Sementara ini pendekatan sasaran tersuai menyediakan cara untuk menggabungkan berbilang perpustakaan statik, perlu diperhatikan bahawa komuniti CMake masih aktif mencari penyelesaian yang lebih elegan untuk tugas biasa ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Perpustakaan Statik menjadi Satu Menggunakan CMake?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!