使用CMake 將多個靜態函式庫合併為一個函式庫
建置依賴大量靜態函式庫的專案時,可能需要合併將這些庫合併到一個單元中進行發布。 CMake 確實有直接組合目標庫的特定方法,例如 target_link_libraries(),但是,它可能無法在所有情況下執行所需的操作。
自訂目標方法
一種方法涉及建立直接操作靜態庫的自訂目標。透過執行 ar 或 libtool 等命令,可以從各個庫中提取目標文件,然後將它們重新組合到單一存檔中。這可以透過以下 CMake 程式碼來實現:
# 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)
此方法有效地將各個庫中的物件檔案聚合到單一檔案中,提供所需的組合庫。
替代考慮因素
雖然自訂目標方法實現了目標,但可能還有其他方法需要考慮。 CMake 提供了 link_libraries() 函數,可以將多個庫連結到單一輸出。此外,研究使用 OBJECT 或 INTERFACE 標誌的 add_library() 函數可能會提供一個解決方案。
以上是如何使用 CMake 將多個靜態函式庫合併為一個函式庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!