ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
実を言うとGitHubのsubmoduleを最近まで使ったことがありませんでした。
いろいろ試していたのですが、その中で根本的な勘違いをしている事に気づきました。
submoduleとはこのサイトに書いてあるとおり、「現在のリポジトリのクローン中に、別のリポジトリの特定のコミットを、サブディレクトリとして参照する」という機能らしいです。
どうにも僕は太字部分を勘違いしたらしく、参照したリポジトリが更新されると勝手にsubmoduleも更新されるものと思っていました。
どうやらこちらで設定しなおす必要があるみたいですね。
GitHub for windowsのGUIでのsubmoduleの追加の方法が分からなかったので、とりあえずGit Shell上でコマンドを入力して追加しています。
まず以下のコマンドでsubmoduleを追加します。
git submodule add https://github.com/Nobu19800/RobotArmController.git RobotArmController
問題はRobotArmControllerというリポジトリを変更した後なのですが、先ほど言ったように自動的には更新されないので以下のコマンドを入力してください。
git submodule foreach 'git checkout master; git pull'
git add RobotArmController
git commit -m "update RobotArmController"
git push origin master
これで更新されるはずです。
Download ZIPをクリックしてダウンロードした場合、submoduleはダウンロードされません。
cloneした場合でも以下のコマンドを入力しないとsubmoduleはcloneされません。
git submodule init
git submodule update
submoduleの中にsubmoduleがある場合もあるので以下のコマンドの方が良いとからしい。
git submodule update --recursive
なんだか凄く面倒くさいなあ。
Windowsだと余計に使いづらい。
自分で作ったコードだったらsubmodueを使わずにそのまま入れた方がましな感じがしなくもないです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
いろいろ試していたのですが、その中で根本的な勘違いをしている事に気づきました。
submoduleとはこのサイトに書いてあるとおり、「現在のリポジトリのクローン中に、別のリポジトリの特定のコミットを、サブディレクトリとして参照する」という機能らしいです。
どうにも僕は太字部分を勘違いしたらしく、参照したリポジトリが更新されると勝手にsubmoduleも更新されるものと思っていました。
どうやらこちらで設定しなおす必要があるみたいですね。
GitHub for windowsのGUIでのsubmoduleの追加の方法が分からなかったので、とりあえずGit Shell上でコマンドを入力して追加しています。
まず以下のコマンドでsubmoduleを追加します。
git submodule add https://github.com/Nobu19800/RobotArmController.git RobotArmController
問題はRobotArmControllerというリポジトリを変更した後なのですが、先ほど言ったように自動的には更新されないので以下のコマンドを入力してください。
git submodule foreach 'git checkout master; git pull'
git add RobotArmController
git commit -m "update RobotArmController"
git push origin master
これで更新されるはずです。
Download ZIPをクリックしてダウンロードした場合、submoduleはダウンロードされません。
cloneした場合でも以下のコマンドを入力しないとsubmoduleはcloneされません。
git submodule init
git submodule update
submoduleの中にsubmoduleがある場合もあるので以下のコマンドの方が良いとからしい。
git submodule update --recursive
なんだか凄く面倒くさいなあ。
Windowsだと余計に使いづらい。
自分で作ったコードだったらsubmodueを使わずにそのまま入れた方がましな感じがしなくもないです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
RTCビルド自動化ツール、複合コンポーネント作成支援ツールを更新しました。
ビルド自動化ツールはあまり変わっていないのですが、複合コンポーネント作成支援ツールはパッケージ作成機能を追加しました。
作成したプロジェクトを利用するのにツール本体をインストールしておく必要があったわけですが、それがそもそも良くなかったと思っていたのでツールを入手してなくても動作できるようにしました。
プロジェクトを作成後にパッケージをどこかに作成するだけです。
生成されたフォルダのstart.bat(start.sh)を起動するとRTCの起動、接続、コンフィギュレーションパラメータの設定、複合コンポーネントの作成を行います。
必要なdllがある場合は自分で追加する必要があります。
一応rtcdを動作させるのに必要なdllは自動的にコピーするようにしていますが、配布する場合はライセンスを記述したテキストファイルを付属させるようにしてください。
ここからはCMakeの話です。
CMakeでインストーラーまで作成するにはCMakeLists.txtに以下の記述を追加します。
まあ他にも以下の項目を設定した方が良いとは思いますが、ちょっと試すだけなら上記だけで大丈夫です。
CPACK_PACKAGE_NAME
CPACK_PACKAGE_VENDOR
CPACK_PACKAGE_DESCRIPTION_SUMMARY
CPACK_PACKAGE_VERSION
CPACK_PACKAGE_VERSION_MAJOR
CPACK_PACKAGE_VERSION_MINOR
CPACK_PACKAGE_VERSION_PATCH
CPACK_PACKAGE_INSTALL_DIRECTORY
後はPACKAGEというプロジェクトをビルドするとインストーラーが作成できるみたいです。
あと、cmakeを使えば環境にかかわらず以下のコマンドでビルドができるみたいです。
cmake --build . --config Release --target PACKAGE
自動的にvcvarsall.batとかVsDevCmd.batを見つけてMsBuildを使っているのだろうか?
仕組みはよく分かりませんけどそれでできるのであればそれでいいです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
ビルド自動化ツールはあまり変わっていないのですが、複合コンポーネント作成支援ツールはパッケージ作成機能を追加しました。
作成したプロジェクトを利用するのにツール本体をインストールしておく必要があったわけですが、それがそもそも良くなかったと思っていたのでツールを入手してなくても動作できるようにしました。
プロジェクトを作成後にパッケージをどこかに作成するだけです。
生成されたフォルダのstart.bat(start.sh)を起動するとRTCの起動、接続、コンフィギュレーションパラメータの設定、複合コンポーネントの作成を行います。
必要なdllがある場合は自分で追加する必要があります。
一応rtcdを動作させるのに必要なdllは自動的にコピーするようにしていますが、配布する場合はライセンスを記述したテキストファイルを付属させるようにしてください。
ここからはCMakeの話です。
CMakeでインストーラーまで作成するにはCMakeLists.txtに以下の記述を追加します。
set(CPACK_GENERATOR "WIX") もしくは set(CPACK_GENERATOR "NSIS")
include(CPack)
まあ他にも以下の項目を設定した方が良いとは思いますが、ちょっと試すだけなら上記だけで大丈夫です。
CPACK_PACKAGE_NAME
CPACK_PACKAGE_VENDOR
CPACK_PACKAGE_DESCRIPTION_SUMMARY
CPACK_PACKAGE_VERSION
CPACK_PACKAGE_VERSION_MAJOR
CPACK_PACKAGE_VERSION_MINOR
CPACK_PACKAGE_VERSION_PATCH
CPACK_PACKAGE_INSTALL_DIRECTORY
後はPACKAGEというプロジェクトをビルドするとインストーラーが作成できるみたいです。
あと、cmakeを使えば環境にかかわらず以下のコマンドでビルドができるみたいです。
cmake --build . --config Release --target PACKAGE
自動的にvcvarsall.batとかVsDevCmd.batを見つけてMsBuildを使っているのだろうか?
仕組みはよく分かりませんけどそれでできるのであればそれでいいです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
RTCのインストーラー作成時にrt_middleware_logo.ico、rt_middleware_logo.bmpが見つからないエラーが出ると言いましたが、どうやら既知の不具合だったみたいです。
Deselect_required_by_componentというマクロからのエラーはドキュメント生成をONにした場合に発生するエラーだと思うので、そのページに書いてある通りBUILD_DOCUMENTATIONをOFFにしてください。
それから例のPARENT_SCOPEオプションが間に入るのも既知だったみたいなので、そのページの通りに修正してください。
やっぱり仕様だったみたいです。
PythonのCMakeLists.txtの不具合に関しては載っていなかったので既知なのかどうかは不明です。
rtc.confで設定したモジュール探索パスはrtc.confが存在するディレクトリからのパスではなくてrtcdを実行したディレクトリからのパスになります。
なので以下のようなバッチファイル、シェルスクリプトをrtc.confと同じフォルダに作成して実行すれば良いということになります。
run.bat
cd /d %~dp0
rtcd -f rtc.conf
run.sh
以前から気になっていたのですが、PythonのRTCでidlcompile.batを実行すると構文エラーが出ていませんかね?
「'do'は、内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されません」と出るので、どうやらif文の所のdoがいらないみたいです。
このエラーのせいでpython.exeがパスから見つかっても、見つからなかった場合の処理も行います。
まあ別にそれで何か問題があるか言うと、全く問題はないので放置しておいても大丈夫です。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
Deselect_required_by_componentというマクロからのエラーはドキュメント生成をONにした場合に発生するエラーだと思うので、そのページに書いてある通りBUILD_DOCUMENTATIONをOFFにしてください。
それから例のPARENT_SCOPEオプションが間に入るのも既知だったみたいなので、そのページの通りに修正してください。
やっぱり仕様だったみたいです。
PythonのCMakeLists.txtの不具合に関しては載っていなかったので既知なのかどうかは不明です。
rtc.confで設定したモジュール探索パスはrtc.confが存在するディレクトリからのパスではなくてrtcdを実行したディレクトリからのパスになります。
なので以下のようなバッチファイル、シェルスクリプトをrtc.confと同じフォルダに作成して実行すれば良いということになります。
run.bat
cd /d %~dp0
rtcd -f rtc.conf
run.sh
#!/bin/sh
cd `dirname $0`
rtcd -f rtc.conf
簡単な事なのですが、こういうファイルを付属してくれたら便利かもしれないです。以前から気になっていたのですが、PythonのRTCでidlcompile.batを実行すると構文エラーが出ていませんかね?
「'do'は、内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されません」と出るので、どうやらif文の所のdoがいらないみたいです。
このエラーのせいでpython.exeがパスから見つかっても、見つからなかった場合の処理も行います。
まあ別にそれで何か問題があるか言うと、全く問題はないので放置しておいても大丈夫です。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
今度はPythonでも試してみたのですが、CMakeの段階で失敗しました。
CMakeLists.txtを読んでみると、
set(CPACK_RESOURCE_FILE_LICENSE "@CMAKE_CURRENT_SOURCE_DIR@/cpack_resources/License.rtf")
の部分が、License.rtfは実際にはcmakeというフォルダにあるみたいなのでここでエラーが出るみたいです。
インストーラーを作成したい人は上の箇所を修正してください。
そこさえ修正すればPACKAGEというプロジェクトをビルドすることでインストーラーが作成できます。
どうやらPythonのRTCではWIXでインストーラーを作成しているみたいなので、C++のRTCでは何故NSISでインストーラーを作成してしまったのかが余計に分からなくなりました。そしてインストールすると以下のディレクトリに各ファイルがインストールされます。
C:\Program Files\RTC名バージョン名
INSTALLという名前のプロジェクトを実行した場合、
C:\Program Files (x86)\OpenRTM-aist\1.1\components\python\RTC名バージョン名
と全然違う場所にインストールされるみたいですが、一体どういう意図があるのかが分かりません。
しかもC++のRTCと違ってCMakeLists.txtの中でCMAKE_INSTALL_PREFIXを設定しているみたいなので、CMakeでプロジェクトを作成する段階でこちらでインストールするディレクトリを設定する事はできないみたいです。
ちなみにcmakeでプロジェクトを作成するときに以下のようなコマンドを入力すればインストールするディレクトリを設定することはできます。
CMakeLists.txtを直接編集するしかないのですかね?
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
CMakeLists.txtを読んでみると、
set(CPACK_RESOURCE_FILE_LICENSE "@CMAKE_CURRENT_SOURCE_DIR@/cpack_resources/License.rtf")
の部分が、License.rtfは実際にはcmakeというフォルダにあるみたいなのでここでエラーが出るみたいです。
インストーラーを作成したい人は上の箇所を修正してください。
そこさえ修正すればPACKAGEというプロジェクトをビルドすることでインストーラーが作成できます。
どうやらPythonのRTCではWIXでインストーラーを作成しているみたいなので、C++のRTCでは何故NSISでインストーラーを作成してしまったのかが余計に分からなくなりました。
C:\Program Files\RTC名バージョン名
INSTALLという名前のプロジェクトを実行した場合、
C:\Program Files (x86)\OpenRTM-aist\1.1\components\python\RTC名バージョン名
と全然違う場所にインストールされるみたいですが、一体どういう意図があるのかが分かりません。
しかもC++のRTCと違ってCMakeLists.txtの中でCMAKE_INSTALL_PREFIXを設定しているみたいなので、CMakeでプロジェクトを作成する段階でこちらでインストールするディレクトリを設定する事はできないみたいです。
ちなみにcmakeでプロジェクトを作成するときに以下のようなコマンドを入力すればインストールするディレクトリを設定することはできます。
cmake . -D CMAKE_INSTALL_PREFIX=パス .
この方法ではPythonのRTCのインストールするディレクトリは上述したように設定できません。CMakeLists.txtを直接編集するしかないのですかね?
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
WindowsでRTCのインストーラーを作成しようとしたら失敗しました。
PACKAGEというプロジェクトをビルドしたら作成できるはずなのですが、エラーが出ます。
ビルドすると_CPack_Packages/win32/NSISにproject.nsiというファイルが生成されて、このファイルからNSISでインストーラーを作成するみたいなのですが、そこでエラーが出ているみたいです。
ログを見てみるとcmake/rt_middleware_logo.ico、cmake/rt_middleware_logo.bmpというファイルを探しているみたいなのですが、cmakeフォルダにそのようなファイルは存在しません。
画像ファイルをこちらで作成して上のエラーを解決しても、Deselect_required_by_componentというマクロでエラーが出るみたいですね。
そこを乗り越えればインストーラーは作成できるようですが、Deselect_required_by_componentの何が悪いのかが分からないのでどう修正すれば良いのかが分かりません。
詳しい人は教えてください。
以前はNSISではなくWIXでインストーラー作成するようになっていたと思うのですが、変更したのでしょうかね?
cpack_options.cmake.inを読んでみた感じWIXに関する設定も記述してあるように見えるのですが、何故NSISでインストーラーを作成するようになっているのかは分かりません。
確か以前は、
C:\Program Files\OpenRTM-aist\1.1\components\C++\RTC名
にインストールされるようになっていたはずなのですが、
C:\Program Files\RTC名バージョン名
に変更されています。
まあデフォルトがこの場所と言うだけで、こちらで変更はできるみたいですけど。
以前のバージョンでインストーラーを作成したことがないのでハッキリしないのですが、このページには上記の場所にインストールされると書いてあります。
ちなみにINSTALLというプロジェクトをビルドした場合もC:\Program Files\RTC名バージョン名にインストールされます。
以前のようにcomponentsという名前のフォルダにインストールしてくれた方が分かりやすいと思いますが、それが仕様なので仕方ないです。
まあでも個々のRTCでインストーラーを作成するメリットはあまりないようには思います。
できれば複数のRTCをまとめてインストールできた方が簡単ですからね。
というわけでCMakeによるプロジェクト生成、ビルド、インストールまでを簡単にするツールを作ってみました。
ここからダウンロードできます。
GUIの追加ボタンを押してファイルを開くダイアログでCMakeLists.txtを選択してください。
そして保存するといくつかバッチファイル、シェルスクリプトが生成されます。
生成されたバッチファイルを実行すると、選択した全てのCMakeLists.txtでプロジェクト生成、ビルド、インストールをすることができます。
自分で使う分には簡単になったように思いますが、人が使う分にはまだ改善が必要のような感じです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PACKAGEというプロジェクトをビルドしたら作成できるはずなのですが、エラーが出ます。
ビルドすると_CPack_Packages/win32/NSISにproject.nsiというファイルが生成されて、このファイルからNSISでインストーラーを作成するみたいなのですが、そこでエラーが出ているみたいです。
ログを見てみるとcmake/rt_middleware_logo.ico、cmake/rt_middleware_logo.bmpというファイルを探しているみたいなのですが、cmakeフォルダにそのようなファイルは存在しません。
画像ファイルをこちらで作成して上のエラーを解決しても、Deselect_required_by_componentというマクロでエラーが出るみたいですね。
そこを乗り越えればインストーラーは作成できるようですが、Deselect_required_by_componentの何が悪いのかが分からないのでどう修正すれば良いのかが分かりません。
詳しい人は教えてください。
以前はNSISではなくWIXでインストーラー作成するようになっていたと思うのですが、変更したのでしょうかね?
cpack_options.cmake.inを読んでみた感じWIXに関する設定も記述してあるように見えるのですが、何故NSISでインストーラーを作成するようになっているのかは分かりません。
確か以前は、
C:\Program Files\OpenRTM-aist\1.1\components\C++\RTC名
にインストールされるようになっていたはずなのですが、
C:\Program Files\RTC名バージョン名
に変更されています。
まあデフォルトがこの場所と言うだけで、こちらで変更はできるみたいですけど。
以前のバージョンでインストーラーを作成したことがないのでハッキリしないのですが、このページには上記の場所にインストールされると書いてあります。
ちなみにINSTALLというプロジェクトをビルドした場合もC:\Program Files\RTC名バージョン名にインストールされます。
以前のようにcomponentsという名前のフォルダにインストールしてくれた方が分かりやすいと思いますが、それが仕様なので仕方ないです。
まあでも個々のRTCでインストーラーを作成するメリットはあまりないようには思います。
できれば複数のRTCをまとめてインストールできた方が簡単ですからね。
というわけでCMakeによるプロジェクト生成、ビルド、インストールまでを簡単にするツールを作ってみました。
ここからダウンロードできます。
GUIの追加ボタンを押してファイルを開くダイアログでCMakeLists.txtを選択してください。
そして保存するといくつかバッチファイル、シェルスクリプトが生成されます。
生成されたバッチファイルを実行すると、選択した全てのCMakeLists.txtでプロジェクト生成、ビルド、インストールをすることができます。
自分で使う分には簡単になったように思いますが、人が使う分にはまだ改善が必要のような感じです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・