ROSの公式ウェブサイトで提供されているpackage.xmlの説明は、おそらく最も包括的なものです。
取得元:http://wiki.ros.org/catkin/package.xml
ウィキ
ウェブページ
ユーザー
目次
概要概要
パッケージのマニフェストは、 XMLファイルと呼ばれているのpackage.xml任意の尾状花準拠パッケージのルートフォルダに含まれている必要があります。このファイルは、パッケージ名、バージョン番号、作成者、メンテナー、他のcatkinパッケージへの依存関係などのパッケージに関するプロパティを定義します。概念は、従来のrosbuildビルドシステムで使用されているmanifest.xmlファイルに似ていることに注意してください。
システムパッケージの依存関係はpackage.xmlで宣言されています。それらが欠落しているか正しくない場合は、ソースからビルドして自分のマシンでテストを実行できる可能性がありますが、ROSコミュニティにリリースされたときにパッケージは正しく機能しません。他の人は、パッケージを使用するために必要なソフトウェアをインストールするためにこの情報に依存しています(U-Texasのcatkinのタスク指向のドキュメントを除く)。
フォーマット2(推奨)
これは、新しいパッケージに推奨される形式です。また、古いフォーマット1パッケージをフォーマット2に移行することをお勧めします。フォーマット1からフォーマット2への移行手順については、catkinAPIドキュメントのフォーマット1からフォーマット2への移行を参照してください。
フォーマット2の完全なドキュメントは、catkinAPIドキュメントにあります。詳細については、REP 140 --Package Manifest Format TwoSpecificationを参照してください。
基本構造
各package.xmlファイルには、ドキュメントのルートタグとして<package>タグがあります。
<package format = "2"> </ package>
必要なタグ
パッケージマニフェストを完成させるために<package>タグ内にネストする必要があるタグの最小限のセットがあります。
-
<name>-パッケージの名前
-
<version>-パッケージのバージョン番号(ドットで区切られた3つの整数である必要があります)
-
<説明>-パッケージの内容の説明
-
<メンテナ>-パッケージをメンテナンスしている人の名前
-
<license>-コードがリリースされるソフトウェアライセンス(GPL、BSD、ASLなど)。
例として、foo_coreと呼ばれる架空のパッケージのパッケージマニフェストを次に示します。
<package format = "2"> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> </ package>
依存関係
最小限のタグを持つパッケージマニフェストは、他のパッケージへの依存関係を指定しません。パッケージには、次の6種類の依存関係があります。
-
ビルドの依存関係は、このパッケージをビルドするために必要なパッケージを指定します。これは、ビルド時にこれらのパッケージのファイルが必要な場合です。これには、コンパイル時にこれらのパッケージのヘッダーを含める、これらのパッケージのライブラリにリンクする、ビルド時に他のリソースを要求する(特にこれらのパッケージがCMakeでfind_package()されている場合)ことがあります。クロスコンパイルシナリオでは、ビルドの依存関係はターゲットアーキテクチャ用です。
-
Build Export Dependenciesは、このパッケージに対してライブラリをビルドするために必要なパッケージを指定します。これは、このパッケージのパブリックヘッダーにそれらのヘッダーを推移的に含める場合です(特に、これらのパッケージがCMakeのcatkin_package()で(CATKIN_)DEPENDSとして宣言されている場合)。
-
実行の依存関係は、このパッケージのコードを実行するために必要なパッケージを指定します。これは、このパッケージの共有ライブラリに依存している場合です(特に、これらのパッケージがCMakeのcatkin_package()で(CATKIN_)DEPENDSとして宣言されている場合)。
-
テストの依存関係は、単体テストの追加の依存関係のみを指定します。ビルドまたは実行の依存関係としてすでに言及されている依存関係を複製してはなりません。
-
ビルドツールの依存関係は、このパッケージがそれ自体をビルドするために必要なビルドシステムツールを指定します。通常、必要なビルドツールは尾状花序だけです。クロスコンパイルシナリオでは、ビルドツールの依存関係は、コンパイルが実行されるアーキテクチャに依存します。
-
ドキュメントツールの依存関係は、このパッケージがドキュメントを生成するために必要なドキュメントツールを指定します。
これらの6種類の依存関係は、次のそれぞれのタグを使用して指定されます。
-
<depend>は、依存関係がビルド、エクスポート、および実行の依存関係であることを指定します。これは、最も一般的に使用される依存関係タグです。
-
<build_depend>
-
<build_export_depend>
-
<exec_depend>
-
<test_depend>
-
<buildtool_depend>
-
<doc_depend>
次の例に示すように、すべてのパッケージには少なくとも1つの依存関係があり、ビルドツールはcatkinに依存しています。
<package format = "2"> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> <buildtool_depend> catkin </ buildtool_depend> </ package>
build、exec、test、およびdocの依存関係を指定するより現実的な例は、次のようになります。
<package format = "2"> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> <url> http://ros.org/wiki/foo_core </ url> <author > Ivana Bildbotz </ author> <buildtool_depend> catkin </ buildtool_depend> <depend> roscpp </ depend> <depend> std_msgs </ depend> <build_depend> message_generation </ build_depend> <exec_depend> message_runtime </ exec_depend> </ package>
依存関係の詳細については、catkinAPIのドキュメントをご覧ください。
メタパッケージ
多くの場合、複数のパッケージを1つの論理パッケージとしてグループ化すると便利です。これは、メタパッケージを介して実行できます。メタパッケージは、package.xmlに次のエクスポートタグが含まれる通常のパッケージです。
<export> <metapackage /> </ export>
catkinに対する必須の<buildtool_depends>依存関係を除いて、メタパッケージは、グループ化されているパッケージに対してのみ実行依存関係を持つことができます。
さらに、メタパッケージには、必要な定型的なCMakeLists.txtファイルがあります。
cmake_minimum_required(VERSION 2.8.3) project(<PACKAGE_NAME>) find_package(catkin REQUIRED) catkin_metapackage()
注:<PACKAGE_NAME>をメタパッケージの名前に置き換えてください。
追加のタグ
-
<url>-パッケージに関する情報のURL。通常はros.orgのwikiページです。
-
<作成者>-パッケージの作成者
フォーマット1(レガシー)
古い尾状花序のパッケージはフォーマット1を使用します。<package>タグにフォーマット属性がない場合、それはフォーマット1パッケージです。新しいパッケージにはフォーマット2を使用します。
package.xmlの形式は単純です。
基本構造
各package.xmlファイルには、ドキュメントのルートタグとして<package>タグがあります。
<パッケージ> </パッケージ>
必要なタグ
パッケージマニフェストを完成させるために<package>タグ内にネストする必要があるタグの最小限のセットがあります。
-
<name>-パッケージの名前
-
<version>-パッケージのバージョン番号(ドットで区切られた3つの整数である必要があります)
-
<説明>-パッケージの内容の説明
-
<メンテナ>-パッケージをメンテナンスしている人の名前
-
<license>-コードがリリースされるソフトウェアライセンス(GPL、BSD、ASLなど)。
例として、foo_coreと呼ばれる架空のパッケージのパッケージマニフェストを次に示します。
<package> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> </ package>
依存関係の構築、実行、およびテスト
最小限のタグを持つパッケージマニフェストは、他のパッケージへの依存関係を指定しません。パッケージには、次の4種類の依存関係があります。
-
ビルドツールの依存関係は、このパッケージがそれ自体をビルドするために必要なビルドシステムツールを指定します。通常、必要なビルドツールは尾状花序だけです。クロスコンパイルシナリオでは、ビルドツールの依存関係は、コンパイルが実行されるアーキテクチャに依存します。
-
ビルドの依存関係は、このパッケージをビルドするために必要なパッケージを指定します。これは、ビルド時にこれらのパッケージのファイルが必要な場合です。これには、コンパイル時にこれらのパッケージのヘッダーを含める、これらのパッケージのライブラリにリンクする、ビルド時に他のリソースを要求する(特にこれらのパッケージがCMakeでfind_package()されている場合)ことがあります。クロスコンパイルシナリオでは、ビルドの依存関係はターゲットアーキテクチャ用です。
-
Run Dependenciesは、このパッケージのコードを実行するため、またはこのパッケージに対してライブラリを構築するために必要なパッケージを指定します。これは、共有ライブラリに依存している場合、またはこのパッケージのパブリックヘッダーにそれらのヘッダーを推移的に含める場合です(特に、これらのパッケージがCMakeのcatkin_package()で(CATKIN_)DEPENDSとして宣言されている場合)。
-
テストの依存関係は、単体テストの追加の依存関係のみを指定します。ビルドまたは実行の依存関係としてすでに言及されている依存関係を複製してはなりません。
これらの4種類の依存関係は、次のそれぞれのタグを使用して指定されます。
-
<buildtool_depend>
-
<build_depend>
-
<run_depend>
-
<test_depend>
次の例に示すように、すべてのパッケージには少なくとも1つの依存関係があり、ビルドツールはcatkinに依存しています。
<package> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> <buildtool_depend> catkin </ buildtool_depend> </ package>
ビルド、ランタイム、およびテストの依存関係を指定するより現実的な例は、次のようになります。
<package> <name> foo_core </ name> <version> 1.2.4 </ version> <description> このパッケージはfoo機能を提供します。 </ description> <maintainer email = "[email protected]"> Ivana Bildbotz </ maintainer> <license> BSD </ license> <url> http://ros.org/wiki/foo_core </ url> <author > Ivana Bildbotz </ author> <buildtool_depend> catkin </ buildtool_depend> <build_depend> message_generation </ build_depend> <build_depend> roscpp </ build_depend> <build_depend> std_msgs </ build_depend> <run_depend> message_runtime </ run_depend> <run_depend> std_msgs </ run_depend> <test_depend> python-mock </ test_depend> </ package>
依存関係の詳細については、こちらをご覧ください。
メタパッケージ
多くの場合、複数のパッケージを1つの論理パッケージとしてグループ化すると便利です。これは、メタパッケージを介して実行できます。メタパッケージは、package.xmlに次のエクスポートタグが含まれる通常のパッケージです。
<export> <metapackage /> </ export>
catkinへの必須の<buildtool_depends>依存関係を除いて、メタパッケージは、グループ化されたパッケージへの実行依存関係のみを持つことができます。
さらに、メタパッケージには、必要な定型的なCMakeLists.txtファイルがあります。
cmake_minimum_required(VERSION 2.8.3) project(<PACKAGE_NAME>) find_package(catkin REQUIRED) catkin_metapackage()
注:<PACKAGE_NAME>をメタパッケージの名前に置き換えてください。
package.xmlファイルのインストールについて話し合った後、メタパッケージにCMakeLists.txtファイルが追加されました。
https://groups.google.com/forum/#!msg/ros-sig-buildsystem/mn-VCkl2OHk/dUsHBBjyK30J
これで、メタパッケージのpackage.xmlファイルがインストールされましたが、他のパッケージがメタパッケージに依存してはならないという要件は、ユーザーが提案された定型的なCMakeLists.txtコードから逸脱しないように要求することで引き続き適用されます。
追加のタグ
-
<url>-パッケージに関する情報のURL。通常はros.orgのwikiページです。
-
<作成者>-パッケージの作成者
詳細については、http://ros.org/reps/rep-0127.htmlを参照してください。