PROJECT_PATH=/home/user/catkin_ws
BUILD_TYPE=release
DEVEL_PREFIX=devel
ROBOT_TYPE=delivery
VERSION_PATH=${PROJECT_PATH}/${ROBOT_TYPE}_packages_version/
#机器人所要编译的包ros_packages=(
global_planner
move_base
dwa_planner
)#***************************************************************************************************************#比较版本号functionversion_gt(){test"$(echo"$@"|tr" ""\n"|sort -V |head -n 1)"!="$1";}#终止捕获函数trap'onCtrlC' INT
functiononCtrlC(){echo'Ctrl+C is captured'exit}#确认版本号管理文件夹是否存在if[! -d "${VERSION_PATH}"];thenecho"${VERSION_PATH} 不存在,创建新的文件夹"mkdir${VERSION_PATH}fi#开始编译部分cd${PROJECT_PATH}source /opt/ros/kinetic/setup.bash
source${PROJECT_PATH}/devel/setup.bash
starttime=`date +'%Y-%m-%d %H:%M:%S'`forpackage_namein${ros_packages[@]}doecho"************************* $package_name ******************************"package_path=`rospack find ${package_name}`package_make_flag=false
#确认找到了该包if[[$package_path== *$package_name* ]];then#获取已经记录的版本号package_version_file=${VERSION_PATH}/${package_name}_version
package_verison_exist=false
package_last_verison=0.0.0
if[ -f "${package_version_file}"];thenpackage_verison_exist=true
package_last_verison=`cat ${package_version_file}`echo"${package_name} last version:${package_last_verison}"elsetouch${package_version_file}fi#获取该包目前的版本号package_xml=$package_path/package.xml
c_version=`awk'/<version>[^<]+<\/version>/{gsub(/<version>|<\/version>/,"",$1);print $1;exit;}' $package_xml`echo${package_name} current version:${c_version}if${package_verison_exist};thenif version_gt ${c_version}${package_last_verison};thenecho"curretn version has been updated, so catkin_make it"package_make_flag=true
elseecho"curretn version has not been updated, so stop catkin_make it"fielseecho"${package_name} has not been catkin, so compile it"package_make_flag=true
fi#将本次版本号保存起来echo${c_version}>${package_version_file}elseecho$package_name not found
package_make_flag=true
fiif$package_make_flag;then
catkin_make -DCATKIN_WHITELIST_PACKAGES=$package_name -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCATKIN_DEVEL_PREFIX=$DEVEL_PREFIXfidoneendtime=`date +'%Y-%m-%d %H:%M:%S'`start_seconds=$(date --date="$starttime" +%s);end_seconds=$(date --date="$endtime" +%s);echo"本次编译花费时间: "$((end_seconds-start_seconds))"s"