はじめに
ROSプログラムをコンパイルする時はcatkin_makeを使っているけれど、仕組みはいまいち分かっていない。(そもそもmakeって何かも良くわかっていない)
そんなあなたも取り敢えず試せる便利なコンパイルオプションがこちら。
msg.hが無いと言われる他
ちゃんとCMakelist.txtに書いてるのに作られてない…
これはおそらくメッセージを作るより前にコンパイルエラーで止まってるのが原因。次のオプションで、エラーが起きたプログラムはとりあえず無視して最後までコンパイルできる。
catkin_make -i
もう一度コンパイルするとエラー出ない。
warningめっちゃ出るんだけど…
前はコンパイル出来たやつがあるときからめっちゃwarning出ることがある。またはerror[warning]みたいになって止まる。
そんなとき、エラーを全無視するオプションがこちら。
catkin_make --cmake-args -DCMAKE_CXX_FLAGS="-w"
エラーを放置することになるのであんまりよくないかも。
パッケージを除外する
他の人が作ったパッケージは動かないことが往々にしてある。その人が帰ってくるまで待つとして、その間そのパッケージは無視してコンパイルしたい時は
catkin_make -DCATKIN_BLACKLIST_PACKAGES="package1;package2"
> ちゃんとCMakelist.txtに書いてるのに作られてない…
ワークスペース内のプロジェクト構成がわからないので確たることは云えませんが、
CMakeLists.txtにビルド依存関係が正しく記述されていないのではないでしょうか。
catkin_package(…)とadd_dependencies(…)の見直しを行ってみては。
あと、Warningは無視せずに向き合ってあげてください。
基本的には”-Wall -Wextra”を付けてビルドし、Warningが無くなるまで修正を行うと良いかと。
パッケージのCMakeLists.txtの冒頭付近に下記を追記しておくと便利です。
add_compile_options(-Wall -Wextra)
コメントありがとうございます。CMakelist.txtを見直したところ、ご指摘の通りadd_dependenciesが定義されていませんでしたのでカスタムメッセージを使用するプログラムについてadd_dependencies(control01 ${PROJECT_NAME}_generate_messages_cpp)を追加したところ正しくビルドされました。
Warningについては他所から持ってきたパッケージがWarningを100以上出したのでとりあえず除外した次第です。もちろんエラーを放置して良いことはないのでご指摘の方法で順次修正を行っていきたいと思います。
ありがとうございましたm(__)m