ホームページ >バックエンド開発 >C++ >CMake を使用して複数の静的ライブラリを 1 つにマージするにはどうすればよいですか?

CMake を使用して複数の静的ライブラリを 1 つにマージするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 05:29:09468ブラウズ

How Can I Merge Multiple Static Libraries into One Using CMake?

CMake を使用して静的ライブラリを 1 つに結合する

複数の静的ライブラリに依存するプロジェクトを操作する場合、これらのライブラリを 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 を使用するバリアント

必要に応じて、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。