Show EOL distros:
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Author: Brian Gerkey, Morgan Quigley
- License: BSD
- Repository: ros
- Source: svn https://code.ros.org/svn/ros/stacks/ros/tags/ros-1.4.10
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Repository: ros
- Source: svn https://code.ros.org/svn/ros/stacks/ros/tags/ros-1.6.9
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: ros-1.8)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: groovy-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: hydro-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: indigo-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: jade-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: kinetic-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: kinetic-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Dirk Thomas <dthomas AT osrfoundation DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: melodic-devel)
Package Summary
rosbuild contains scripts for managing the CMake-based build system for ROS.
- Maintainer status: maintained
- Maintainer: Michel Hidalgo <michel AT ekumenlabs DOT com>, Jacob Perron <jacob AT openrobotics DOT org>
- Author: Brian Gerkey, Troy Straszheim, Morgan Quigley, Dirk Thomas <dthomas AT openrobotics DOT org>
- License: BSD
- Source: git https://github.com/ros/ros.git (branch: noetic-devel)
Contents
概要
ROSが用いる中心のビルドツールはCMakeです。CMakeは、構成とmakeの機能を提供する強力なクラスプラットフォームのビルドツールです。
ROSのfuerteのバージョンまで、ROSはrosbuildの一部であるrosmakeと呼ばれるcmakeのラッパースクリプトを使ってROSをビルドされます。 groovyのバージョンではじめるのなら、新しいパッケージにはcatkinがビルドシステムとして、推奨されます。
rosbuildが行ってくれることは、ROSのパッケージツリーからビルドの適切なフラッグをあつめ、依存ファイルを見つけ出すことです。たとえば、rosbuildによって提供されるマクロを用いると、自動的にパッケージが依存するほかのパッケージによって出力されるビルドフラッグたちを引き継ぎます。また、rosbuildはdeclaring testsの拡張サポートも提供します。 packagesをビルドするために、rosmakeを使います。
すべてのROSのpackageはトップレベルのディレクトリに以下の3つのファイルを持っていないくてはなりません。
CMakeLists.txt : CMakeビルドファイルです。ROS用のマクロを使用しています。
manifest.xml : パッケージのmanifest.xml. このファイルは、ライセンスや著者、概要情報が含まれてます。このパッケージが依存するパッケージやそれに依存しているほかのパッケージに対するコンパイラやリンカのフラッグを提供するパッケージもインクルードします。
Makefile : 標準的なMakefileです。後ろで、未だにパッケージをビルドするのにmakeを呼び出します。すべての新しいパッケージでは、Makefileの中にただひとつ以下の表のみを含むだけで十分です。この行は、CMakeを呼び出します。
include $(shell rospack find mk)/cmake.mk
API (CMakeLists.txt ファイルを書く)
rosbuildのほとんどは、パッケージのテストやビルドを管理するために使われるCMakeLists.txtファイルを書くためのAPIです。詳細はAPI ドキュメントをご覧ください. 例もご覧ください.
クロスコンパイル
ROSは、まだ、クロスコンパイルのための強力なサポートを持っていませんが、non-x86プラットフォームでもROSを準備するのに成功している例もあります。もっと詳しく知りたい場合は、notes on cross-compilingでお探しください。
ビルドをカスタムする。(デバッグ, 最適化, デフォルトビルドフラッグ)
どのようにビルドするか、例えばデバッグや最適化や共有や、静的ライブラリなどでおそらく多くの行いたい変更がでてくると思います。ROSのシステムのデフォルトは$ROS_ROOT/core/rosbuild/rosconfig.cmakeに記されていますが、このファイルは編集しないでください。
以下の変数が、$ROS_ROOT/core/rosbuild/rosconfig.cmakeの中に定義されています。
ROS_BUILD_TYPE: ビルドタイプをセットします。オプションは以下です。(デフォルト値: RelWithDebInfo):
Debug : w/ debug symbols, w/o optimization
Release : w/o debug symbols, w/ optimization
RelWithDebInfo : w/ debug symbols, w/ optimization
RelWithAsserts : w/o debug symbols, w/ optimization, w/ assertions (i.e., w/o -DNDEBUG). New in ros 1.1.
MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries
ROS_BUILD_STATIC_EXES: 静的実行ファイルのビルドするかどうか(e.g., 他のマシンへコピーするため)? true or false; default: false
ROS_BUILD_SHARED_LIBS: 共有ライブラリをビルドするかどうか? true or false; default: true
ROS_BUILD_STATIC_LIBS: 静的ライブラリをビルドするかどうか? true or false; default: false
ROS_COMPILE_FLAGS: すべてのソースファイルに対するデフォルトのコンパイルフラグ; default: "-W -Wall -Wno-unused-parameter -fno-strict-aliasing"
ROS_LINK_FLAGS: すべての実行ファイルやライブラリのためのデフォルトのリンクフラグ; default: ""
これらの設定は、優先順位でリストされた以下の3箇所で値を変更して、オーバーライドすることができます。
- (つまり, 後ろの設定は手前の設定で上書きされます。):
現在のパッケージのCMakeLists.txt(つまり、rosbuild_init()の実行でできるもの)
, たとえば:
静的libsを有効にしたり、一方で共有libを無効にしたりする。:
cmake_minimum_required(VERSION 2.4.6) include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) # 以下で、このパッケージに対してのみ共有libの無効と静的libの有効を行います。 set(ROS_BUILD_STATIC_LIBS true) set(ROS_BUILD_SHARED_LIBS false) rosbuild_init() rosbuild_add_library(mylib mysrc.cpp)
他の例では, 警告を変更することもできます:
cmake_minimum_required(VERSION 2.4.6) include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) # より警告レベルを高く設定することもできる。 set(ROS_COMPILE_FLAGS "-W -Wall -Wextra -pedantic") rosbuild_init() rosbuild_add_library(mylib mysrc.cpp)
他の例では, DebugからRelesaseにビルドを変更することもできます:
cmake_minimum_required(VERSION 2.4.6) include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) #デバッグも終了しコンパイラ最適化を行いたいときは、以下のようにreleaseビルドを行う。 set(ROS_BUILD_TYPE Release) rosbuild_init() rosbuild_add_library(mylib mysrc.cpp)
- もし$(ROS_ROOT)/rosconfig.cmakeがあるなら, 例えば:
# 全てのROSのパッケージの静的と共有libが必要なときは(共有はデフォルトで有効です。) set(ROS_BUILD_STATIC_LIBS true)
- もしrosconfig.cmakeが現在のパッケージのトップレベルのディレクトリにあるなら, 例えば:
# I want just static libs, just for this package set(ROS_BUILD_STATIC_LIBS true) set(ROS_BUILD_SHARED_LIBS false)
注意: パッケージのCMakeLists.txtの設定が、rosconfig.cmakeの設定によって上書きされてしまう点では、この指定の仕方は、あまり直感的ではありません。
ROS #defines
ビルドシステムは、どの操作の段階のコマンドライン上でも以下のプリプロセッサマクロを定義しています。:
ROS_PACKAGE_NAME='"foo"', これは、'foo'というパッケージでパッケージがビルドされることがわかります。
== 多種多様の設定==
Intelのコンパイラを使用する
ROSをIntel C/C++のコンパイラでコンパイルするには、まず、IntelのコンパイラをIntelのウェブサイトにしたがってインストールする必要があります。 次に、ROSのパッケージ内のCMakeLists.txtで以下の行を含むように訂正します。 Next, modify your CMakeLists.txt in the ROS package to contain the following lines:
set (CMAKE_C_COMPILER $(INTEL_DIR)/bin/icc) set (CMAKE_CXX_COMPILER $(INTEL_DIR)/bin/icpc) set (CMAKE_C_EXECUTABLE $(INTEL_DIR)/bin/xild) set (CMAKE_CXX_EXECUTABLE $(INTEL_DIR)/bin/xild) set (CMAKE_C_FLAGS "-msse3 -ip -no-prec-div -parallel -O3 -fPIC" ) set (CMAKE_CXX_FLAGS "-msse3 -ip -no-prec-div -parallel -O3 -fPIC" ) set (CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,$(INTEL_DIR)/lib -L$(INTEL_DIR)/lib -lguide -lcxaguard -limf -lsvml -lirc -lpthread -lintlc" )
$(INTEL_DIR)がIntelのコンパイラのインストールされているディレクトリです。(例えば,/opt/intel/cc/10.1.008)また、ここで使われている最適化フラグはオプションです。
もしコンパイルしたいパッケージがサードパーティパッケージ(例えばODE)であるときは、Makefilesをカスタマイズし、正しいフラグを設定する必要があります。
ccasheやdistccを使う
ROSのビルドシステムは、ccache やdistccを使用することができます。いつもどおり、設定をすれば使用することができます。
例えば、ccacheを有効にするには:
export PATH=/usr/lib/ccache:$PATH
以下を確かめてください。
which gcc
上記がccacheのラッパーを指し示しているか確認してください。(例えば, /usr/lib/ccache/gcc).
例えば, ccacheと一緒にdistccを有効にするには, pre1からpre4という名前の4つのマシンを持っているとしたときに以下のように設定する必要があります:
export DISTCC_HOSTS='@pre1/1 @pre2/1 @pre3/1 @pre4/1' export CCACHE_PREFIX=distcc
パラレルジョブ
もし、マルチコアのマシンを持っているなら、 , ビルドの際にROS_PARALLEL_JOBSを設定することができます。