2015-09-30 10 views
5

Ho un singolo progetto (con sottoprogetti) per il quale vorrei generare più eseguibili di installazione NSIS, anziché avere più componenti elencati in un singolo programma di installazione NSIS. È possibile? O devo organizzare il mio codice in progetti separati?Can CMake/CPack può generare più installer NSIS per un singolo progetto?

+0

Si desidera che gli eseguibili del programma di installazione siano sottoprogetti? In tal caso, perché non costruire da solo ogni sottoprogetto, con il relativo programma di installazione? Per fare in modo che NSIS installer (e qualsiasi altro) separi i file installati, devi assegnarli a diversi * componenti *. Il comando 'project()', che avvia ogni sottoprogetto, non ha alcun significato per CPack. – Tsyvarev

risposta

0

Uno potrebbe fornire un attributo CMake, ad es. COMPONENT che può essere impostato su un valore da un set predefinito di nomi di pacchetti come: COMPONENT_1 | COMPONENT_2 | ... COMPONENT_X

Il nome del pacchetto potrebbe anche essere un nome che non corrisponde a un nome di singolo componente ma un insieme di componenti che verrebbero aggiunti nel CPACK_COMPONENTS_ALL. Se COMPONENT è uguale a ALL_COMPONENTS, il valore di CPACK_COMPONENTS_ALL conterrà tutti i componenti possibili.

L'imballaggio 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() 

Per creare un programma di installazione per ogni componente si dovrebbe correre ad esempio:

cmake -COMPONENT=COMPONENT_1 ../ 
nmake package 
cmake -COMPONENT=COMPONENT_2 ../ 
nmake package 
... 
cmake -COMPONENT=COMPONENT_X ../ 
nmake package 

Tenete a mente che, poiché i binari sono costruiti sulla prima esecuzione del nmake package , le successive chiamate a cmake e nmake package riconfiggeranno solo la confezione e costruiranno solo il COMPONENTE richiesto (noto anche come COMPONENT)