プロジェクトが複数の静的ライブラリに依存している場合、プロジェクトの依存関係を維持することが困難になることがあります。プロセスを合理化するには、これらのライブラリを 1 つのユニットにマージすることが望まれます。 CMake にはライブラリをリンクする機能が備わっていますが、静的ライブラリを直接結合する機能がありません。
この問題に対処するには、カスタム ターゲットを使用して目的の結果を達成できます。 ar や libtool などのコマンドを利用すると、静的ライブラリから個々のオブジェクト ファイルを抽出し、新しいアーカイブにマージできます。たとえば、次のコード スニペットを考えてみましょう。
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)
この例では、結合されたカスタム ターゲットは、a ライブラリと b ライブラリからオブジェクト ファイルを抽出するために必要なコマンドを実行し、それらを という新しいアーカイブにマージします。 libcombi.a.この結合されたライブラリは、c ターゲットを使用してメインの実行可能ファイルにインポートできます。
または、Apple の開発ツールの libtool コマンドをこの目的に使用できます。
add_custom_target(combined COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b )
このアプローチでは、次のような機能が提供されます。堅牢なソリューションとしては、静的ライブラリを直接組み合わせるために CMake 内でよりネイティブな実装を行うことが有益です。これにより、プロセスがさらに合理化され、カスタム ターゲットの必要性がなくなります。
以上がCMake を使用して複数の静的ライブラリを 1 つのライブラリにマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。