catkin_makeで特定のパッケージを除外する

テック

catkin_makeで特定のパッケージをコンパイルの対象から外す方法と、外したパッケージを再びコンパイル対象にする方法のメモです。

 

スポンサーリンク

catkin_makeで特定のパッケージを除外する方法と注意点

catkin_make時に特定のパッケージを除外する方法はシンプルです。

catkin_makeのあとにキャッシュ変数”DCATKIN_BLACKLIST_PACKAGES”を宣言すればできます。

コマンドは以下の通り。

$ catkin_make -DCATKIN_BLACKLIST_PACKAGES="package_name"

“package_name”に除外したいパッケージを指定してください。

これで特定のパッケージをコンパイルから除外できますが、注意点があります。

それは、「除外設定はずっと残っている」ということです。

キャッシュ変数は、宣言と同時にキャッシュファイルに保存されます。

つまり、キャッシュファイルを消すか、値を書き換えるまでは一度設定した値が残り続けしまうのです。

従って、”package_name”を除外した場合、その後いくらcatkin_makeを実行しても、”package_name”がコンパイルされることはありません。

それで困らない状態であれば問題ないのですが、除外設定を解除したいことも当然あります。

除外設定を解除したい場合は次のコマンドです。

$ catkin_make -DCATKIN_BLACKLIST_PACKAGES=""

単に、DCATKIN_BLACKLIST_PACKAGESを空で定義すればOKということですね。

これで私のように「なんでコンパイルされてへんねん……」と1時間潰すこともないはずです。

 

スポンサーリンク

特定のパッケージをコンパイルされないようにしたくなるとき

ありませんか?

以下は、私がなぜDCATKIN_BLACKLIST_PACKAGESを使うに至ってしまったかの話です。

ROSには様々なメッセージ型が用意されており、たいていの場合はそれを活用すれば済みます。すごくありがたい。

しかし自作デバイスをROSで使うとなった場合などには、既存のメッセージでは対応しきれなかったり、各要素にちゃんと名前を付けたくなることがあります。

そういったときには自分でメッセージファイルを作って、includeして使うということが簡単にできます。これも大変便利な仕組みです。

自作メッセージファイルを作る場合には、それを使用するパッケージとは別に、メッセージ用のパッケージを用意することが推奨されています。つまり、

  • my_package
  • my_package_msgs

という2つのパッケージができるわけですね。

当然、”my_package”は”my_package_msgs”に依存しています。

例えば、my_package_msgsを先に完成させてコンパイルしておけば何も問題は無いのですが、2つを同時に完成させて「さて、catkin_makeするか」となったときに、エラーとなることがあります。

依存関係をちゃんと書いている(つもり)状態でもエラーになるので困ったものです。

いや、もしかしたら私の依存関係の書き方が間違ってるだけで、ちゃんと書いたらちゃんとやってくれるのかもしれませんが()

 

今回はメッセージ型とそれを利用するノードを一気に作ってcatkin_makeした結果、メッセージをコンパイルする前にノードがコンパイルされてしまって、その際に「そんなメッセージ.hないんですけど?」と怒られてしまいました。

まぁ、ノード作る前にちゃんとある程度は設計して、必要なメッセージ型は先に作っておきましょう、ということですね。

 

テック
スポンサーリンク
スポンサーリンク
もりをフォローする
スポンサーリンク
みゆともり

コメント