catkin_package()メソッドが使用され

  依存し、依存パッケージは、あなたのプログラムパッケージパッケージBを見つけるためにfind_package(...)を使用するようにAプログラムを渡す必要が尾状花を伝えるために使用CATKIN_DEPENDS

  そして、ちょうどfind_package()とcatkin_package()でCMakeLists.txtで発見される、それは()でfind_packageを()機能している、catkin_packageを言うことです。

  1 cmake_minimum_required(バージョン2.8.3)

  2プロジェクト(beginner_tutorials)

  3

  4 ##尾状花と任意の尾状花パッケージを探します

  5 find_package(尾状花必要なコンポーネントroscpp rospy std_msgs genmsg)

  6

  7 ## ROSメッセージとサービスを宣言します

  8 add_message_files(ディレクトリMSG FILES Num.msg)

  9 add_service_files(DIRECTORY SRV FILES AddTwoInts.srv)

  10

  11の##は、追加されたメッセージおよびサービスの生成します

  12 generate_messages(依存関係std_msgs)

  13

  14 ##尾状花パッケージを宣言します

  15 catkin_package()

  たとえば、あなたが(REQUIREDブースト)find_package、およびヘッダファイル内のコードの行では、インストールを#includeとします。あなたのヘッダファイルを使用することができ、独自の#includeパッケージに依存するために、彼らはあなたが(実際には、ヘッダファイルの#includeのVisual C ++で同じようにではない)のパスを含めるに含めるディレクトリブーストを含める必要があり、また、あなたは(以前のコメント付き)Boostライブラリを接続する必要があります。すでにヘッダファイルにエクスポートしているので(それがプログラムから派生しているんの#include?)(それは視覚的なC ++の#includeで運転されている可能性があり、次の操作がクラスCMakeLists.txtにこのファイルを生成するのですか? )依存性は、彼らはあなたが依存しているところから取得する必要があります。彼らはあなたのパッケージを構築するために使用して、直接ではなく、ブーストを使用しているので、それは、彼らはもはや、(その依存関係の宣言を繰り返す必要はないパッケージに依存しているパッケージに依存する)find_packageを(REQUIREDブースト)必要はありません。

  あなたのパッケージブーストは、実装の詳細であるという事実に依存しているので、(依存が後ろから見た?または2依存している、に依存する必要があります)ときfind_packageによって、いくつかのパケット(1つのパケット)(.. (2つのパッケージ)パッケージを探していたとき。)、彼ら(パッケージ)は、間接的にブーストに依存することができます。このメカニズムは、あなたのcatkin_packageで働くことですしてみましょう(...)の呼び出しは、(二次包装内)に依存ブーストパラメータを追加(プラスブーストは、依存関係の依存関係に依存することができます依存します)。実装の詳細は以下のとおりです。

  尾状花は(ブースト)find_packageます(グローバルに作用します)

  $ {your_pkg_LIBRARIES} $ {} Boost_LIBRARIES(パッケージに作用する)に追加しました

  $ {your_pkg_INCLUDE_DIRS}に$ {Boost_INCLUDE_DIRS}を加えます。(二次包装に作用します)

  your_pkg_LIBRARIESは、上記のメンテナンスと合わせ、ブーストパッケージを使用しなければならないことはyour_pkg_LIBRARIESのx'm話すと言うよりも、このパッケージの動作環境のために多くの変数でなければなりません。

  私たちは、注意してください尾状花は(find_packageます)、それは正確なパッケージ名ですがわかりますし、そのパッケージ(各ライブラリはまた、Ubuntuの環境下ではまだ多くの変数を持っていることを証明するために)_LIBRARIESと_INCLUDE_DIRS変数を試してみてください。しかし、得られ変数結果の形でfind_package(...)は必ずしもそうではありません(以下に連動して、変数名が固定されていないことを指摘しておかなければ)、CMakeのはこれを強制することはありませんので、(この文の意味は、CMakeのではありません命名規則を強制?)。例えば、find_packageのPythonパッケージ形態find_package(PythonLibs REQUIRED)結果変数は、次のとおりPYTHON_INCLUDE_PATH(これは、PYTHON_INDLUDE_PATHはBoost_INCLUDE_DIRSに対応し、彼らが一致している場合は矛盾している命名規則ことに留意すべきであるyour_pkg_DIRS割り当て後の値でありますそして、PYTHON_INCLUDE_PATHは)PYTHON_INCLUDE_DIRSと呼ばれるべきです。

  find_package(OpenGLのREQUIRED)結果変数はOPENGL_INCLUDE_DIRました。(命名規則この時間は、追加ブーストライブラリの例と一致するであろう)。

  プレフィックスは(PythonLibs - > PYTHON)異なるものとなるタグの他に、接尾辞は非標準になり(* _INCLUDE_DIRS対PYTHON_INCLUDE_PATHとOPENGL_INCLUDE_DIR、3つのそれぞれこの文では接尾辞、およびPATH DIRとDIRSがあります)。あなたは合格するINCLUDE_DIRSオプションを使用する必要がある。この場合、変数は、ヘッダファイル内catkin_package()へのディレクトリ(この変数手段のdirsを含む)に、共感オプションをライブラリにも同様のことをやっているが含まれています。

  CATKIN_DEPENDSはオプションに依存し、選択肢は非常に似ていますが、CATKIN_DEDPENSのために、あなただけのリストに(つまり、アプリケーションパケットroscreate-PKGが作成した)尾状花パッケージを配置することができます。尾状花は練習と何が間違っている、あなたに警告し、尾状花は、いくつかの追加チェックを実行することができますオプションの単一のセットの恩恵に依存します。

  最後に、簡単な例CMakeLists.txtを与えます:

  cmake_minimum_required(VERSION 2.8.3)

  プロジェクト(FOO)

  find_package(必要なコンポーネントを後押し

  システム

  糸

  )無錫良い×××病院http://www.zzch120.com/

  find_package(PythonLibs REQUIRED)

  find_package(OpenGLのREQUIRED)

  find_package(尾状花必要なコンポーネント

  rosconsole

  roscpp

  )

  include_directories(

  含める

  $ {} catkin_INCLUDE_DIRS

  $ {} OPENGL_INCLUDE_DIR

  $ {} PYTHON_INCLUDE_PATH

  )

  catkin_package(

  INCLUDE_DIRSは$ {OPENGL_INCLUDE_DIR}を含みます

  ライブラリは$ {OPENGL_LIBRARIESを}狛犬

  CATKIN_DEPENDS roscpp

  ブーストに依存

  )

  ...

  この例では、私が(find_package()必要なコンポーネントをブースト)find_packageと(catkin_packageするためにそれを渡していることがわかります)である部分(catkin_package(DEPENDSブースト))によって決まります。生成されたこと(catkin_package())のでする互換CMakeの変数(変数一貫したフォーマット???)です。

  CMakeLists.txtファイル(PythonLibs REQUIRED)でfind_packageが、私は外の世界に任意のファイルに暴露され、私の頭の中に含まれていなかったので、それは、)(catkin_packageする渡すことはありません。()INCLUDE_DIRSの一部と、(変数ではなく、直接割り当て)ライブラリの変数はCMakeのそれが生成と互換性がありませんので、私は、(OpenGLの...)をfind_packageので、私はcatkin_packageに明示的にそれを渡します。最後に、私は尾状花... rosconsole roscpp、および内部使用のために(find_packageが、私は唯一の.c *ファイルでrosconsole使用することができますので、私はそれを渡すことはありませんので、catkin_package()は私の一部をCATKIN_DEPENDSだけroscppを置きます。

  最後に、ノートでは、しかし、パッケージは、ブーストなどの用語の使用に直接依存している場合、それらは表示がfind_package(...)ではなく、他のパッケージでそれを見つけることを保証しなければならない暗黙のうちにそれに依存します。依存関係としてパッケージfooブーストを誘導する場合は、この例では、だけでなく、バ​​ーパッケージfooに依存するだけでなく、その後バーも依存ブーストが正常にコンパイルすることができる場合に表示されていない内部使用ブースト。しかし、fooが、それはもはやFOOを通過するのブーストの暗黙の信頼を持っているので、その後、バーは、今コンパイルされません、ブーストへの依存を再構築しないと、削除することもできます。


おすすめ

転載: blog.51cto.com/14335413/2404246