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