web-dev-qa-db-ja.com

WindowsでCMake + CPack + NSISを使用してインストーラーを作成する方法

構築しているC++ベースのシステム用のクロスプラットフォームインストーラーを作成したいのですが。

CMakeを使用してすべてをビルドしていますが、CPackを使用してインストーラーを作成できればすばらしいと思います。 CPackはすでにOSXで動作していますが、Windowsでは動作しません。物事を簡単にするために、私は http://www.cmake.org/Wiki/CMake:Packaging_With_CPack で例を取得して、NSISインストーラーソフトウェアで動作するようにしました。構成後(VS 2010 Win64ジェネレーターを使用)、NSISインストーラーがどこにも見つかりません。

多分私は混乱していますが、Visual Studioを必要とせずに、ソース、CMake、CPack、およびNSISのみでインストールパッケージを作成することは可能だと思いました。これは可能ですか?

完全なチュートリアルへのリンク( http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack にあるチュートリアルは、NSISを機能させるために関連情報をスキップし、ジェネレーターやコンパイラーについて言及していません)非常に役立つだろう、または私がこの神秘的に生成されたNSISインストーラーに到達する方法の基本的な説明は素晴らしいでしょう。

上記の例のCMakeLists.txtは次のとおりです。

cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
project(StPMS)

add_library(mylib mylib.cpp)

add_executable(mylibapp mylibapp.cpp)
target_link_libraries(mylibapp mylib)

 install(TARGETS mylib 
   ARCHIVE
   DESTINATION lib
   COMPONENT libraries)
 install(TARGETS mylibapp
   RUNTIME
   DESTINATION bin
   COMPONENT applications)
 install(FILES mylib.h
   DESTINATION include
   COMPONENT headers)

set(CPACK_GENERATOR NSIS)
set(CPACK_PACKAGE_NAME "MyLib")
set(CPACK_PACKAGE_VENDOR "CMake.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")
SET(CPACK_NSIS_MODIFY_PATH ON)

INCLUDE(CPack)
25
sklum

... Visual Studioを必要とせずに、ソース、CMake、CPack、およびNSISのみでインストールパッケージを作成できると思いました。これは可能ですか?

やや。それは、「Visual Studioが必要ない」という意味によって異なります。 libとexeを実際に作成するには、ビルドツールが必要です。 Windowsでは、特に"Visual Studio 10 Win64"をジェネレーターとして指定した場合は、Visual Studioのmsbuildのようなものが必要です。

「Visual Studioを実行せずに」という意味であれば、答えは「はい」です。 --build 引数を使用して、選択したビルドツールをCMakeに実行させることができます。

CMakeを実行すると、ビルドディレクトリにPACKAGE.vcxprojというファイルが作成されます。これをビルドしてインストーラーを作成します。 Visual Studio内からPACKAGEプロジェクトをビルドするか、次のようにしてmsbuildを直接呼び出すことができます。

msbuild /P:Configuration=Release PACKAGE.vcxproj

vSコマンドプロンプトのビルドディレクトリから。

これにより、ビルドディレクトリにMyLib-1.0.0-win64.exeという名前のインストーラーが生成されます。


CMakeのみを使用する場合、msbuildを呼び出す代わりに次の方法を使用できます。

cmake --build . --target PACKAGE.vcxproj --config Release


または、最初にソリューションをビルドしてから、CPackを呼び出してインストーラーを作成します。

cmake --build . --config Release
cpack -C Release
38
Fraser