2015-09-30 13 views
5

私は単一のNSISインストーラに複数のコンポーネントをリストするのではなく、複数のNSISインストーラ実行ファイルを生成したい(サブプロジェクトを持つ)プロジェクトが1つあります。これは可能ですか?あるいは、自分のコードを別々のプロジェクトに編成する必要がありますか?CMake/CPackは、1つのプロジェクトに対して複数のNSISインストーラを生成できますか?

+0

インストーラ実行ファイルをサブプロジェクト単位で実行しますか?もしそうなら、インストーラを使ってすべてのサブプロジェクトを単独でビルドしてみませんか? make NSISインストーラ(と他のもの)がインストールされたファイルを分割するためには、それらを異なる*コンポーネント*に割り当てる必要があります。すべてのサブプロジェクトを開始する 'project()'コマンドは、CPackには意味がありません。 – Tsyvarev

答えて

0

CMake属性を提供することができる。 COMPONENTは、次のような定義済みのパッケージ名から値を設定することができます:COMPONENT_1 | COMPONENT_2 | ... COMPONENT_X

パッケージ名は単一のコンポーネント名には対応していませんが、 CPACK_COMPONENTS_ALLに追加されるコンポーネント。 COMPONENTがALL_COMPONENTSに等しい場合、CPACK_COMPONENTS_ALLの値にはすべての可能なコンポーネントが含まれます。

cmakeの包装:

if (WIN32) 
    set (CPACK_COMPONENTS_ALL ${COMPONENT}) 
    set (CPACK_PACKAGE_NAME ${COMPONENT}) 
    set (CPACK_COMPONENT_${COMPONENT}_DISPLAY_NAME "${COMPONENT}") 
    set (CPACK_COMPONENT_${COMPONENT}_DESCRIPTION "${COMPONENT}") 
    set (CPACK_NSIS_DISPLAY_NAME "${COMPONENT}") 
    set (CPACK_NSIS_PACKAGE_NAME "${COMPONENT}") 
    set (CPACK_NSIS_INSTALL_ROOT "C:") 
    set (CPACK_GENERATOR NSIS) 
else() 
    ... 
endif() 

は、あなたが例えば実行します各コンポーネント用のインストーラを作成するには:

バイナリがあるので、 nmake packageの最初の実行に構築することを念頭に置いて
cmake -COMPONENT=COMPONENT_1 ../ 
nmake package 
cmake -COMPONENT=COMPONENT_2 ../ 
nmake package 
... 
cmake -COMPONENT=COMPONENT_X ../ 
nmake package 

ベアその後のcmakenmake packageの呼び出しは、パッケージングのみを再構成し、要求されたコンポーネント(別名コンポーネント)を作成するだけです。

関連する問題