構築している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)
... 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