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

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

DDD
DDDオリジナル
2024-12-01 15:48:10446ブラウズ

How Can I Combine Multiple Static Libraries into a Single One Using CMake?

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

ソフトウェア開発シナリオでは、大規模なプロジェクトの依存関係として機能する複数の静的ライブラリがあることが一般的です。配布を合理化し、依存関係管理の複雑さを軽減するには、これらのライブラリを単一の静的ライブラリに結合することが望ましい場合があります。 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 サイトの他の関連記事を参照してください。

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