1

プロジェクトがライブラリの詳細を知る必要がないように、CMake プロジェクトでインポートされた内部ライブラリを使用したいと考えています。(「内部ライブラリ」とは、他の CMake ライブラリ ターゲットを意味します。正しい用語についてはわかりません...)

情報には以下が含まれている必要があります。

  • 各構成タイプのライブラリの場所 (dll および .pdb ファイルを含む)
  • ライブラリ インクルード ファイル フォルダ

いくつかのプロジェクトでは、次のようなものを書きたいと思います:

 SET(TARGET_DEPENDS ext_lib1 ext_lib2 internal_lib1)

ビルド システムにすべてのインクルード フォルダーと構成を処理させます。

これを達成するための最良の方法は何ですか?

私の知る限り、add_library(... IMPORTED)他のほとんどすべてがサポートされていますが、インクルードフォルダー情報が含まれています。

4

1 に答える 1

0

「内部」ライブラリを構築する場合YourInternalLibraryConfig.cmake、ユーザーがライブラリを「インポート」するために必要なすべてのものを準備するファイルを準備することもできます。

これYourInternalLibraryConfig.cmakeは、内部ライブラリのビルド時またはインストール時に作成する必要があります。

このYourInternalLibraryConfig.cmakeでは、呼び出しadd_library( YourInternalLibrary IMPORTED )て、すべてのプロパティが正しく準備されていることを確認する必要があります。例)準備できる

  • YourInternalLibrary_INCLUDE_DIRS必要な include-dirs を持つ変数。
  • YourInternalLibrary_DEFINES必要なコンパイラー定義を持つa
  • 提供されるすべてのライブラリのYourInternalLibrary_LIBRARIES要約

そうすれば、内部ライブラリのユーザー (メイン app など) は次のように簡単に呼び出すことができます。

find_package( YourInternalLibrary )
include_directories( ${YourInternalLibrary_INCLUDE_DIRS} )
add_definitions( ${YourInternalLibrary_DEFINES} )
target_link_library( main ${YourInternalLibrary_LIBRARIES} )

より複雑なプロジェクトでは、これらの 3 つの手順を実行する別のプロジェクトを生成することを選択できますUseYourInternalLibrary.cmake。オプションで、内部の特定の部分を有効/無効にするスイッチを使用できます。

いくつかの良い例については、VtkまたはOpenCVのソースを見てください。

于 2012-12-03T21:11:31.103 に答える