Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggabungkan Berbilang Perpustakaan Statik ke dalam Perpustakaan Tunggal Menggunakan CMake?

Bagaimanakah Saya Boleh Menggabungkan Berbilang Perpustakaan Statik ke dalam Perpustakaan Tunggal Menggunakan CMake?

DDD
DDDasal
2024-12-07 00:20:10245semak imbas

How Can I Combine Multiple Static Libraries into a Single Library Using 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn