ソフトウェア開発シナリオでは、大規模なプロジェクトの依存関係として機能する複数の静的ライブラリがあることが一般的です。配布を合理化し、依存関係管理の複雑さを軽減するには、これらのライブラリを単一の静的ライブラリに結合することが望ましい場合があります。 CMake は、この目標を達成するためにいくつかのアプローチを提供しています。
1 つのアプローチは、target_link_libraries コマンドを活用することです。ただし、このコマンドは指定されたライブラリをリンク依存関係として追加するだけであり、それらを単一のライブラリに結合するわけではないことに注意することが重要です。
よりシームレスなソリューションとしては、カスタム ターゲットを ar とともに使用することを検討してください。指示。このアプローチを示すサンプル CMake スクリプトを次に示します。
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)
このスクリプトは、2 つの静的ライブラリ (a および b) と、結合されたライブラリ (c) に依存する実行可能ファイル (メイン) をビルドします。結合されたカスタム ターゲットは、ar コマンドを使用して個々のライブラリからオブジェクト ファイルを抽出し、それらを c.a.
に結合します。
add_custom_target(combined COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b )または、Apple の libtool を使用して結合を実行することを検討してください。一方、カスタム ターゲット アプローチは、複数の静的ライブラリを結合する手段を提供します。CMake コミュニティが、この共通のより洗練されたソリューションを依然として積極的に模索していることは注目に値します。タスク。
以上がCMake を使用して複数の静的ライブラリを 1 つに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。