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

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

DDD
DDDオリジナル
2024-12-07 00:20:10242ブラウズ

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

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

多数の静的ライブラリに依存するプロジェクトを構築する場合、マージすることが望ましい場合があります。これらのライブラリを単一のユニットにまとめてリリースします。 CMake には、target_link_libraries() など、ターゲット ライブラリを直接結合するための特定のメソッドがありますが、すべての場合に必要なアクションを実行できるわけではありません。

カスタム ターゲット アプローチ

1 つのアプローチには、静的ライブラリを直接操作するカスタム ターゲットを作成することが含まれます。 ar や libtool などのコマンドを実行することで、個々のライブラリからオブジェクト ファイルを抽出し、それらを 1 つのアーカイブに再結合することができます。これは、次の CMake コードを通じて実現できます:

# Add the individual static libraries
add_library(a a.cpp a.h)
add_library(b b.cpp b.h)

# Create the combined library target
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
)

# Import the combined library
add_library(c STATIC IMPORTED GLOBAL)
add_dependencies(c combined)
set_target_properties(c
    PROPERTIES
    IMPORTED_LOCATION ${C_LIB}
)

# Link the combined library to the executable
target_link_libraries(main c)

このメソッドは、個々のライブラリのオブジェクト ファイルを効果的に 1 つのアーカイブに集約し、目的の組み合わせライブラリを提供します。

代替の考慮事項

カスタム ターゲットのアプローチは目的を達成しますが、考慮すべき代替アプローチが存在する場合があります。 CMake は、link_libraries() 関数を提供します。この関数は、複数のライブラリを 1 つの出力にリンクできる可能性があります。さらに、OBJECT フラグまたは INTERFACE フラグを指定した add_library() 関数の使用を調査すると、解決策が見つかる可能性があります。

以上がCMake を使用して複数の静的ライブラリを 1 つのライブラリに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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