Skip to content

Instantly share code, notes, and snippets.

@UnaNancyOwen
Last active June 25, 2020 23:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save UnaNancyOwen/f6025cf155acb8f444374c1c25530f1f to your computer and use it in GitHub Desktop.
Save UnaNancyOwen/f6025cf155acb8f444374c1c25530f1f to your computer and use it in GitHub Desktop.
How to generate PCL All-in-one Installer

How to generate PCL All-in-one Installer

このドキュメントではPCL All-in-one Installerを生成する手順を解説します。
この手順には手作業が多く含まれており、ユーザーが正しく再現できるかどうかわかりません。
そのため、個別のサポートやご質問にはお応え致しかねますでご了承下さい。

Development Environment

Require

  • Visual Studio 2019 (or latest)
  • CMake 3.17 (or latest)
  • NSIS 3.05 (or latest)
  • Script for fix project.nsi

DOCS (Option) *1

  • Doxygen 1.8.14
  • MiKTeX 2.9.6850
  • Ghostscript 9.10
  • HTML Help Workshop 4.74.8702
  • Graphviz 2.38

TUTORIALS (Option) *1 *2

  • Python 2.7.17
  • Sphinx==1.8.5
  • sphinxcontrib-doxylink==1.3
  • sphinx_rtd_theme==0.4.3
  • pyparsing==2.1.9

*1 Docs/Tutorialsではこれらの依存関係のバージョンを変更すると動作しない可能性があります。これは動作実績です。
*2 Tutorialsを生成するにはPython2が必要です。現在、Python3では"Advanced"プロジェクトがビルドできません。将来的に私たちはPython3に移行する必要があります。

How To Generate Installer

  1. 依存関係をインストール、環境変数にパスを通します。

  2. CMakeでPCLのプロジェクトを構成、生成します。
    基本的な構成は以下のドキュメントを参照してください。
    https://gist.github.com/UnaNancyOwen/59319050d53c137ca8f3#cmake https://gist.github.com/UnaNancyOwen/c186514340ad2b0fa3b6dd505f9d27c3#file-docs-md

    • BUILD
      • BUILD_all_in_one_installer ☑(check)
    • WITH
      • WITH_DOCS ☑(check) *3
      • WITH_TUTORIAL ☑(check) *3

    *3 これらはDocs/Tutorialsを生成する場合のみ必要です。(Option)

  3. Visual StudioでPCLをビルド、インストールします。

    1. ALL_BUILDプロジェクトをDebug/Release構成でビルドする。
    2. INSTALLプロジェクトをDebug/Release構成でビルドする。
  4. Visual Studioでパッケージを生成する準備をします。

    1. PACKAGEプロジェクトをDebug構成でビルドする。
      このプロジェクトは、パッケージに必要なファイルを収集、インストーラーを生成します。
      しかし、現在のビルド構成のファイルのみ収集されるため、ここではインストーラーの生成までは行いません。パッケージに必要なファイルを収集が終わったらビルドを停止します。(3rdPartyはビルド構成によらずすべてのファイルが収集されるので、Release構成でビルドしたときに収集されるものを利用します。)

      1>------ ビルド開始: プロジェクト: PACKAGE, 構成: Debug x64 ------
      1>CPack: Create package using NSIS
      1>CPack: Install projects
      1>CPack: - Install project: PCL [Debug]
      1>CPack: -   Install component: pcl_common
      1>CPack: -   Install component: pcl_kdtree
      1>CPack: -   Install component: pcl_octree
      1>CPack: -   Install component: pcl_search
      1>CPack: -   Install component: pcl_sample_consensus
      1>CPack: -   Install component: pcl_filters
      1>CPack: -   Install component: pcl_2d
      1>CPack: -   Install component: pcl_geometry
      1>CPack: -   Install component: pcl_io
      1>CPack: -   Install component: pcl_features
      1>CPack: -   Install component: pcl_ml
      1>CPack: -   Install component: pcl_segmentation
      1>CPack: -   Install component: pcl_visualization
      1>CPack: -   Install component: pcl_surface
      1>CPack: -   Install component: pcl_registration
      1>CPack: -   Install component: pcl_keypoints
      1>CPack: -   Install component: pcl_tracking
      1>CPack: -   Install component: pcl_recognition
      1>CPack: -   Install component: pcl_stereo
      1>CPack: -   Install component: pcl_outofcore
      1>CPack: -   Install component: pcl_people
      1>CPack: -   Install component: pcl_tools
      1>CPack: -   Install component: doc
      1>CPack: -   Install component: pclconfig
      1>CPack: -   Install component: Eigen
      1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(149,5):       warning MSB5021: ビルドが取り消されたため、実行可能なタスク "cmd" とその子プロセスを終了しています。
      1>プロジェクト "PACKAGE.vcxproj" のビルドが終了しました -- 失敗。
      1>タスクが取り消されました。
      1>タスクが取り消されました。
      ビルドが取り消されました。
      
    2. フォルダ名を変更する。
      Debug構成のパッケージに必要なファイルが_CPack_Packagesフォルダに収集されています。
      ここで、フォルダ名を_CPack_Packages_Debugなどに変更します。

    3. PACKAGEプロジェクトをRelease構成でビルドする。
      同様に現在のビルド構成のファイルのみ収集されるため、ここではインストーラーの生成までは行いません。パッケージに必要なファイルを収集が終わり、project.nsiが生成されたらビルドを停止します。

      1>------ ビルド開始: プロジェクト: PACKAGE, 構成: Release x64 ------
      1>CPack: Create package using NSIS
      1>CPack: Install projects
      1>CPack: - Install project: PCL [Release]
      1>CPack: -   Install component: pcl_common
      1>CPack: -   Install component: pcl_kdtree
      1>CPack: -   Install component: pcl_octree
      1>CPack: -   Install component: pcl_search
      1>CPack: -   Install component: pcl_sample_consensus
      1>CPack: -   Install component: pcl_filters
      1>CPack: -   Install component: pcl_2d
      1>CPack: -   Install component: pcl_geometry
      1>CPack: -   Install component: pcl_io
      1>CPack: -   Install component: pcl_features
      1>CPack: -   Install component: pcl_ml
      1>CPack: -   Install component: pcl_segmentation
      1>CPack: -   Install component: pcl_visualization
      1>CPack: -   Install component: pcl_surface
      1>CPack: -   Install component: pcl_registration
      1>CPack: -   Install component: pcl_keypoints
      1>CPack: -   Install component: pcl_tracking
      1>CPack: -   Install component: pcl_recognition
      1>CPack: -   Install component: pcl_stereo
      1>CPack: -   Install component: pcl_outofcore
      1>CPack: -   Install component: pcl_people
      1>CPack: -   Install component: pcl_tools
      1>CPack: -   Install component: doc
      1>CPack: -   Install component: pclconfig
      1>CPack: -   Install component: Eigen
      1>CPack: -   Install component: Boost
      1>CPack: -   Install component: Qhull
      1>CPack: -   Install component: FLANN
      1>CPack: -   Install component: VTK
      1>CPack: -   Install component: OpenNI2
      1>CPack: Create package
      1>EXEC : CPack error : Problem running NSIS command: "C:/Program Files (x86)/NSIS/makensis.exe" "C:/pcl-1.11.0/build/_CPack_Packages/win64/NSIS/project.nsi"
            1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(149,5):       warning MSB5021: ビルドが取り消されたため、実行可能なタスク "cmd" とその子プロセスを終了しています。
      1>プロジェクト "PACKAGE.vcxproj" のビルドが終了しました -- 失敗。
      1>タスクが取り消されました。
      1>タスクが取り消されました。
      ビルドが取り消されました。
      
  5. パッケージを生成します。

    1. ファイルをコピーする。
      Debug構成のパッケージに必要なファイルが_CPack_Packages_Debugフォルダに収集されています。Release構成のパッケージに必要なファイルが_CPack_Packagesフォルダに収集されています。
      _CPack_Packages_Debugフォルダに含まれる以下のDebug構成のファイルを_CPack_Packagesフォルダにコピーします。

      pcl_*d.dll
      pcl_*d.lib
      pcl_*d.exe
      

      ファイルは同じフォルダ構成でコピーしてください。
      (e.g. _CPack_Packages_Debug/win64/NSIS/PCL-1.11.0-AllInOne-msvc2019-win64/pcl_common/bin/pcl_commond.dll -> _CPack_Packages/win64/NSIS/PCL-1.11.0-AllInOne-msvc2019-win64/pcl_common/bin/pcl_commond.dll

    2. NSISプロジェクトファイルを修正する。
      NSISプロジェクトファイル(_CPack_Packages/win64/NSIS/project.nsi)はRelease構成のファイルのみでアンインストーラーを生成します。 これではアンインストールしたときにDebug構成のファイルが残ってしまいます。
      そこで、NSISプロジェクトファイルをスクリプトで修正します。このスクリプトでは、pcl_*.dllpcl_*.libpcl_*.exeを削除する行を見つけると次の行にDebugファイルの接尾辞(d)を付けて追加します。これでDebug構成のファイルもアンインストーラーで削除されるようになります。

         Delete "$INSTDIR\bin\pcl_common.dll"
      +  Delete "$INSTDIR\bin\pcl_commond.dll"

      Scriptproject.nsiをドラッグ&ドロップすると修正された_project.nsiが生成されます。
      2020-05-13_11h37_57

    3. NSISプロジェクトファイルをビルド、PCL All-in-one Instllerを生成する。
      修正したNSISプロジェクトファイル(_CPack_Packages/win64/NSIS/_project.nsi)のコンテキストメニューから「Compile NSIS Script」を選択するとパッケージのコンパイルが実行されます。
      コンパイルが終了するとPCL All-in-one Installerが生成されます。
      2020-05-13_11h38_19 2020-05-13_11h38_53 2020-05-13_11h47_03 2020-05-13_11h47_19

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment