2012-10-30 9 views
17

ビルドしているC++ベースのシステム用のクロスプラットフォームインストーラを作成したいと思います。WindowsでCMake + CPack + NSISを使ってインストーラを作成するには?

私はCMakeを使ってすべてをビルドしています。私はCPackを使ってインストーラを作ることができれば素晴らしいと思います。私はすでにOSX上で動作しているCPackを持っていますが、Windows上で動作させることはできません。作業を簡単にするために、私はという例題をNSISインストーラソフトウェアで動作させようとしました。 VSIS 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) 

答えて

26

...私はどのなしで唯一のソース、CMakeの、CPack、およびNSISでインストールパッケージを作成することは可能だろうと思いましたVisual Studioが必要です。これは可能ですか?

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

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

CMakeを実行すると、ビルドディレクトリにPACKAGE.vcxprojというファイルが作成されます。これは、インストーラを作成するこれを構築しています。あなたは、Visual Studio内からパッケージプロジェクトをビルドするか、またはあなたが行うことで、直接の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 
+2

パーフェクト。私は一度一人がVSの使用の点に達すると何をすべきかに関する一貫した文書を見つけることができませんでした。私は本当に助けに感謝します! – sklum

関連する問題