複数の静的ライブラリに依存するプロジェクトを操作する場合、これらのライブラリを 1 つのまとまりのあるユニットに結合することが不可欠になります。 CMake は、この課題に対する堅牢なソリューションを提供し、ダウンストリームの依存関係のメンテナンスの必要性を排除します。
target_link_libraries を直接使用して静的ライブラリを結合しようとすると、失敗することがよくあります。ただし、結合されたライブラリが実行可能ファイルの依存関係として使用される場合、CMake はライブラリを自動的にマージするようです。
カスタム ターゲットを使用して、目的の結果を達成できます。
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 )
このターゲットは、個々の静的ライブラリからオブジェクト ファイルを抽出し、それらを新しい静的ライブラリに結合します。 library.
必要に応じて、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 )
場合によってはもっと単純なアプローチがあるはずだと思われますが、このカスタム ターゲットは静的ライブラリを 1 つに効果的に結合します。言うまでもなく、この手法により依存関係の管理が簡素化され、結合されたライブラリを下流のコンシューマにシームレスに配信できるようになります。
以上がCMake を使用して複数の静的ライブラリを 1 つにマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。