start-jsk / rtmros_common

OpenRTM - ROS interoperability packages
http://wiki.ros.org/rtmros_common
12 stars 52 forks source link

別のidlをincludeしているidlのbuildがうまく行かない #861

Closed eisoku9618 closed 8 years ago

eisoku9618 commented 8 years ago

https://github.com/eisoku9618/hrpsys-base/commit/448e0effe0bf30271b5b22d93ed0fe596ef8b6fb のように、 hrpsys-baseのStabilizerService.idlの中でAutoBalancerService.idlをincludeした場合に、 hrpsys-baseのbuildは通るのですが、hrpsys_ros_bridgeのbuildがうまく行かないようです。

以下のエラーが出ます。

In file included from /home/leus/ros/hydro/devel/include/hrpsys_ros_bridge/idl/StabilizerServiceStub.h:30:0,
                 from /home/leus/ros/hydro/devel/include/hrpsys_ros_bridge/idl/StabilizerServiceStub.cpp:12:
/home/leus/ros/hydro/devel/include/hrpsys_ros_bridge/idl/StabilizerService.hh:23:34: fatal error: AutoBalancerService.hh: No such file or directory
compilation terminated.
eisoku9618 commented 8 years ago

自動生成されるファイル(StabilizerService.hh)のincludeの囲み文字が勝手に変更されてしまうのが原因のようです.

自動生成される~/ros/hydro/devel/include/hrpsys_ros_bridge/idl/StabilizerService.hhに書かれている#include <AutoBalancerService.hh>がダメで,直接ファイルを編集して#include "AutoBalancerService.hh"にしてカレントディレクトリを見るようにしたら通りました.

hrpsys-baseのbuildで作られるStabilizerService.hhでは#include "AutoBalancerService.hh"になっているのに対し, hrpsys_ros_bridgeのbuildで作られるStabilizerService.hhでは#include <AutoBalancerService.hh>になっています.

eisoku9618 commented 8 years ago

XXXservice.hhは

https://github.com/start-jsk/rtmros_common/blob/master/hrpsys_ros_bridge/catkin.cmake#L91

で呼んでいるrtmbuild_genidlの中で作られていて,具体的には以下のコマンド

`pkg-config openrtm-aist  --variable=rtm_idlc` `pkg-config openrtm-aist  --variable=rtm_idlflags` -C/tmp/ `rospack find hrpsys_ros_bridge`/idl/StabilizerService.idl
pkg-config openrtm-aist --variable=rtm_idlc pkg-config openrtm-aist --variable=rtm_idlflags
/usr/bin/omniidl -bcxx -Wba -nf -I/home/eisoku/ros/hydro_parent/devel/include/openrtm-1.1/rtm/idl
eisoku9618 commented 8 years ago

omniidlに以下のオプションが使えそう

-Wbuse_quotes  Use quotes in #include directives (e.g. "foo" rather than <foo>).
mmurooka commented 8 years ago

idlをincludeするのが同じクラスを使いたいみたいな理由でしたら, それぞれのidlに同じ定義を書いておくのでいいと思います (と@snozawa さんがオフラインでコメントしていました.)

eisoku9618 commented 8 years ago

https://github.com/tork-a/openrtm_aist-release/pull/4 で解決しました.

となっていましたので,openrtm-aist.pcに-Wbuse_quotesを付け加えました.