CMakeでのDEB/RPMパッケージ作成手順¶
例としてImageCalibrationコンポーネントを使用する
1) テンプレートが生成したCMakeLists.txtを使ったパッケージ作成動作の確認¶
「tar.Z, sh, tar.gz」の3種類のパッケージが生成される。
「ImageCalibration/PARENT_SCOPE」というパスは存在しないので、これを定義している部分1ヶ所をコメントアウトする必要がある。
- ImageCalibration/include/ImageCalibration/CMakeLists.txt の修正
set(hdrs ImageCalibration.h PARENT_SCOPE ←★この行をコメントアウトする CalibrationServiceSVC_impl.h )
- バイナリ配布物の生成
$ cd build $ cmake .. $ make $ cpack -C CPackConfig.cmake
- build下に以下のファイルが生成される
- ImageCalibration-1.0.0.tar.Z
- ImageCalibration-1.0.0.sh
- ImageCalibration-1.0.0.tar.gz
- build/_CPack_Packages下にも出力される
_CPack_Packages └── Linux ├── STGZ │ ├── ImageCalibration-1.0.0 │ │ └── components │ │ ├── bin │ │ │ └── ImageCalibrationComp │ │ ├── include │ │ │ └── imagecalibration-1 │ │ │ ├── idl │ │ │ │ ├── BasicDataType.idl │ │ │ │ ├── CalibrationService.idl │ │ │ │ ├── ExtendedDataTypes.idl │ │ │ │ └── InterfaceDataTypes.idl │ │ │ └── imagecalibration │ │ │ ├── CalibrationServiceSVC_impl.h │ │ │ ├── ImageCalibration.h │ │ │ └── idl │ │ │ ├── BasicDataType.hh │ │ │ ├── CalibrationService.hh │ │ │ ├── ExtendedDataTypes.hh │ │ │ └── InterfaceDataTypes.hh │ │ ├── lib │ │ │ ├── ImageCalibration │ │ │ │ └── ImageCalibrationDepends.cmake │ │ │ ├── ImageCalibration.so │ │ │ └── pkgconfig │ │ │ └── imagecalibration.pc │ │ └── share │ │ └── imagecalibration-1 │ │ ├── imagecalibration-config-version.cmake │ │ └── imagecalibration-config.cmake │ └── ImageCalibration-1.0.0.sh ├── TGZ │ ├── ImageCalibration-1.0.0 │ │ └── components │ │ ├── bin │ │ │ └── ImageCalibrationComp │ │ ├── include │ │ │ └── imagecalibration-1 │ │ │ ├── idl │ │ │ │ ├── BasicDataType.idl │ │ │ │ ├── CalibrationService.idl │ │ │ │ ├── ExtendedDataTypes.idl │ │ │ │ └── InterfaceDataTypes.idl │ │ │ └── imagecalibration │ │ │ ├── CalibrationServiceSVC_impl.h │ │ │ ├── ImageCalibration.h │ │ │ └── idl │ │ │ ├── BasicDataType.hh │ │ │ ├── CalibrationService.hh │ │ │ ├── ExtendedDataTypes.hh │ │ │ └── InterfaceDataTypes.hh │ │ ├── lib │ │ │ ├── ImageCalibration │ │ │ │ └── ImageCalibrationDepends.cmake │ │ │ ├── ImageCalibration.so │ │ │ └── pkgconfig │ │ │ └── imagecalibration.pc │ │ └── share │ │ └── imagecalibration-1 │ │ ├── imagecalibration-config-version.cmake │ │ └── imagecalibration-config.cmake │ └── ImageCalibration-1.0.0.tar.gz └── TZ ├── ImageCalibration-1.0.0 │ └── components │ ├── bin │ │ └── ImageCalibrationComp │ ├── include │ │ └── imagecalibration-1 │ │ ├── idl │ │ │ ├── BasicDataType.idl │ │ │ ├── CalibrationService.idl │ │ │ ├── ExtendedDataTypes.idl │ │ │ └── InterfaceDataTypes.idl │ │ └── imagecalibration │ │ ├── CalibrationServiceSVC_impl.h │ │ ├── ImageCalibration.h │ │ └── idl │ │ ├── BasicDataType.hh │ │ ├── CalibrationService.hh │ │ ├── ExtendedDataTypes.hh │ │ └── InterfaceDataTypes.hh │ ├── lib │ │ ├── ImageCalibration │ │ │ └── ImageCalibrationDepends.cmake │ │ ├── ImageCalibration.so │ │ └── pkgconfig │ │ └── imagecalibration.pc │ └── share │ └── imagecalibration-1 │ ├── imagecalibration-config-version.cmake │ └── imagecalibration-config.cmake └── ImageCalibration-1.0.0.tar.Z 43 directories, 51 files
- build下に以下のファイルが生成される
- ソース配布物の生成
$ cd build $ cpack --config CPackSourceConfig.cmake
2) debパッケージ作成動作の確認¶
1)に対して、debパッケージが生成されるように修正する。
- ImageCalibration/CMakeLists.txt の修正
- ジェネレータでDEBを指定する
- MAINTAINER情報を設定する
- debパッケージの場合、CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER の指定が必須
- ここでは PROJECT_MAINTAINER という変数名で定義し、cmake/cpack_options.cmake.in で設定する
set(LINUX_PACKAGE_GENERATOR "DEB") ←*1 set(PROJECT_MAINTAINER "Noriaki Ando <n-ando@aist.go.jp>") ←*2
- ImageCalibration/cmake/cpack_options.cmake.in の修正
- Windows環境用のパッケージ生成定義しかないので、Linux用の設定を追加する
<修正前> ENDIF (WIN32) ↓ <修正後> ELSE(WIN32) set(CPACK_GENERATOR @LINUX_PACKAGE_GENERATOR@) ←*1 set(CPACK_PACKAGE_CONTACT @PROJECT_MAINTAINER@) ←*2 ENDIF (WIN32)
- Windows環境用のパッケージ生成定義しかないので、Linux用の設定を追加する
パッケージを生成する。この設定で、これで「ImageCalibration-1.0.0.deb」が生成される。
$ cd build $ cmake .. $ make package または、cmakeの後に $ make $ cpack -C CPackConfig.cmake としてもよい
パッケージの内容を確認する
$ dpkg -x ImageCalibration-1.0.0.deb . $ ls ImageCalibration-1.0.0.deb usr $ tree usr usr └── components ├── bin │ └── ImageCalibrationComp ├── include │ └── imagecalibration-1 │ ├── idl │ │ ├── BasicDataType.idl │ │ ├── CalibrationService.idl │ │ ├── ExtendedDataTypes.idl │ │ └── InterfaceDataTypes.idl │ └── imagecalibration │ ├── CalibrationServiceSVC_impl.h │ ├── ImageCalibration.h │ └── idl │ ├── BasicDataType.hh │ ├── CalibrationService.hh │ ├── ExtendedDataTypes.hh │ └── InterfaceDataTypes.hh ├── lib │ ├── ImageCalibration │ │ ├── ImageCalibrationDepends-noconfig.cmake │ │ └── ImageCalibrationDepends.cmake │ ├── ImageCalibration.so │ └── pkgconfig │ └── imagecalibration.pc └── share └── imagecalibration-1 ├── imagecalibration-config-version.cmake └── imagecalibration-config.cmake 12 directories, 17 files
3) debパッケージに含まれるファイルを整理する¶
パッケージには実行ファイルとライブラリファイルのみの構成にする。ImageCalibration-1.1.0.deb
usr └── share └── openrtm-1.1 └── components └── c++ └── opencv-rtcs ├── ImageCalibration.so └── ImageCalibrationComp
上記の構成にするため、以下の修正を行う。
- ImageCalibration/CMakeLists.txt の修正
- インストール先を指定
else(WIN32) set(OPENRTM_SHARE_PREFIX "share/openrtm-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") set(INSTALL_PREFIX "${OPENRTM_SHARE_PREFIX}/components/${PROJECT_TYPE}")
- インストール先を指定
- ImageCalibration/cmake/CMakeLists.txt の修正
- 不要な部分をコメントアウト(2ヶ所)
#install(FILES ${pkg_conf_file} # DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ COMPONENT component) #install(FILES ${cmake_mods} DESTINATION ${SHARE_INSTALL_DIR} COMPONENT library)
- 不要な部分をコメントアウト(2ヶ所)
- ImageCalibration/idl/CMakeLists.txt の修正
- 不要な部分をコメントアウト(2ヶ所)
#install(FILES ${idls} DESTINATION ${INC_INSTALL_DIR}/idl # COMPONENT idl) #install(FILES ${idl_headers} # DESTINATION ${INC_INSTALL_DIR}/${PROJECT_NAME_LOWER}/idl # COMPONENT headers)
- 不要な部分をコメントアウト(2ヶ所)
- ImageCalibration/include/ImageCalibration/CMakeLists.txt の修正
- 不要な部分をコメントアウト
#install(FILES ${hdrs} DESTINATION ${INC_INSTALL_DIR}/${PROJECT_NAME_LOWER} # COMPONENT library)
- 不要な部分をコメントアウト
- ImageCalibration/src/CMakeLists.txt の修正
- BIN_INSTALL_DIR、LIB_INSTALL_DIR を INSTALL_PREFIX へ変更する
#install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}Comp # EXPORT ${PROJECT_NAME} # RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT component # LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT component # ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT component) #install(EXPORT ${PROJECT_NAME} # DESTINATION ${LIB_INSTALL_DIR}/${PROJECT_NAME} # FILE ${PROJECT_NAME}Depends.cmake) install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}Comp EXPORT ${PROJECT_NAME} RUNTIME DESTINATION ${INSTALL_PREFIX} COMPONENT component LIBRARY DESTINATION ${INSTALL_PREFIX} COMPONENT component ARCHIVE DESTINATION ${INSTALL_PREFIX} COMPONENT component)
- BIN_INSTALL_DIR、LIB_INSTALL_DIR を INSTALL_PREFIX へ変更する
4)RPMパッケージを作成する¶
3)のDEBパッケージの設定で以下の1行を変更するだけ。 ImageCalibration-1.1.0.rpm
- ImageCalibration/CMakeLists.txt の修正
set(LINUX_PACKAGE_GENERATOR "RPM")
- パッケージの内容を確認する
$ rpm2cpio ImageCalibration-1.1.0.rpm | cpio -id $ ls ImageCalibration-1.1.0.rpm usr $ tree usr usr └── share └── openrtm-1.1 └── components └── c++ └── opencv-rtcs ├── ImageCalibration.so └── ImageCalibrationComp