-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
パラレルなcatkin buildでエラーになる #373
Comments
前に#84 のissueでもかきましたが、 複数プログラムにわかれてると、cmakeの書き方が複雑になり、不要な一時生成ファイルがたくさんでき、また並列実行に弱いです。 |
これより前のログが見たいです 2015年8月28日金曜日、Shunichi [email protected]さんは書きました:
◉ Kei Okada |
元のファイルが、urdfかな、が中途半端なファイルになってそうですね。 2015年8月28日金曜日、Kei [email protected]さんは書きました:
✉︎ from iPhone |
https://gist.github.com/snozawa/3d3586d3bd3865c7e9aa
で確認できます。 |
かなり古い記憶であやふやなんだけど,どこかの時点でrtmros_common以下の部分(cmake/compile_robot_model.cmake) で,とうぜんハマリポイントも思い出せていないんだけど, add_custom_targetのDEPENDSはファイルを書いておく.この名前がターゲット名と依存するファイルになる. add_custom_commandは
add_custom_command(output_file
|
#326 projectGenerator起因の並列問題はおっしゃるとおりのPRで解決しています。 https://github.com/start-jsk/rtmros_tutorials/blob/master/hrpsys_ros_bridge_tutorials/CMakeLists.txt#L391
となってるのをせめて
などのようにするのがよさそうとのことでした。 |
いや,僕もprojectGeneratorの話はしていなくて,純粋にcmakeの理解不足から正しくないcmakeの依存関係が書かれているところが有るはず,という指摘です.で,それは,cmake/compile_robot_model.cmake と hrpsys_ros_bridge_tutorials/CMakeLists.txt の両方で起きる可能性があって,前者は直したつもりだけど,後者は最後まで見きれていないです,というのが僕の最新情報です. で,#373 (comment) の理解が正しければ,
みたいに,元から有るファイルがDEPENDSにあるのは危険ですね.という指摘です. 変なスクリプトを作ってその場しのぎをしていくのはやめよう,には大賛成ですが,そういうところまで手と頭が回る人はレアなので,それはそれでぼちぼち進めるとして,それとはべつに,正しいcmakeの書き方を共有して,治せるところを直すのがいいと思います.という意見でした. |
ところで,
したとき右下にはなんて出ているかな?
なんだけど,-p2 して同じように 1/2となるようにしてもエラーに成るかなん. |
…df conversion to avoid parallel cmake problem (start-jsk#373)
すいません、確かにそうでした。。。 英語力に自信ないですが、add_custom_commandのドキュメントには
は
ということなのでしょうか。 また、
は、
はDEPENDSがなければ、普通に単品でtarget指定してるのと同じで(依存関係に規程されないテキトーなタイミングで)buildされますよ、ということをいっているようにみえます。 add_custom_xxで指定されない既存ファイルをDEPENDSにいれては動かない、とは明示的には書いてないきがします。 |
成功確率はあがりますが、エラったきがします。
|
エラー箇所ですが、見た限りでは必ず |
indigoではあるけど上の状況でエラーがでないんだけど,もうなおしちゃったりしたのかな. |
#376
4になってますね。(これでも前のバージョンならエラーになるとは思うのですが、、、) |
治っているならまあいいか.
の解釈だけど,#373 (comment) は間違いかな.もう少し思い出してきたのは,
とあると,
みたいになるんだっけな. |
こちらは
で
でしょうか。 |
ん,どっちも同じだと思うけど(https://github.com/start-jsk/rtmros_tutorials/issues/373#issuecomment-136094620 の例だと1_to_0 というコマンドでfile_1 が出来る)
で,この例だといいけど,outputに無いファイルがあるとか,謎な中間ファイルがあるとか,そういう風になって破綻していた気がします.直感的には(こいつが余計)な行は無いだろうと思ってCMake書くけど,実はこれが出てくるので,COMMANDの入出力がちゃんとOUTPUT, DEPENDにかかれているように作らないとダメだね,という話だったかと思います. |
試しに
をCMakeLists.txtとしてみて、あらかじめ
とした状態で
としたら、CMakeFiles/file_generated/build.cmakeの中身は
となって、「余計」部分がはいってなさそうでした。 |
うーん.たしかにそうですねぇ.勘違いだったかなぁ? |
ちなみに,コメントアウトを戻して最後の |
ちょっと直してみました。 まず原因ですが、euscolladaのスクリプトでほぼ落ちていて、 つまり、xx.urdfをcollada_to_urdfで生成するのは時間がかかっていて、 岡田先生が元々おっしゃっていたのも多分これ系だと思われますが、cmakeをちゃんとした書き方にしてないとでてきそうです。
として、file1がfile0のファイル自体にdependした場合、file0が存在したらfile1をつくるためのコマンドが実行されるようです。 上記を
としてfile0自体でなくてfile0_generatedのようなtargetという形態で依存させたら、 ただ、documentではっきりした記述がなくて #384 |
#373 (comment) で注目すべきは,
でfile1が3回つくられていることです. #373 (comment) との違いはtargetの数で,CMakeではtargetの数だけ別のディレクトリがCMakeFiles以下に作られて,その時に上に有るようにOUTPUTが無いときに,別のtargetにoutputが依存していると,それぞれのtargetにそのoutputを書き出すコマンドが自動挿入されるんだとおもいます. なので,何かを生成するにはそのためのターゲットをつくっておいて,それに依存するものが複数有るときは,それぞれのターゲットが,最初のターゲットに依存する,という形にしないといけないということだとおもいます. |
なるほど、だいぶわかってきました。 |
現状なおっているので、closeします。 cmkaeの書き方(add_custom_target)まわりはちゃんと挙動を調べるひつようがありそうなのと、 |
#326
と同じようにまたエラーがでるきがします。
catkin buildでエラーがでて、
-p1 -j1
ならエラーでないです。The text was updated successfully, but these errors were encountered: