2010-04-14 10 views
9

Estoy usando el generador de paquetes NSIS en CMake 2.8.1 para distribuir una aplicación Qt. Todo funciona bien ... excepto el uso de CPACK_CREATE_DESKTOP_LINKS para crear un enlace de escritorio a la aplicación.Creando el ícono del escritorio de Windows en CMake + CPack + NSIS

He consultado el CMake source (incluida su propia definición de instalación "bootstrap" para Windows), y hasta donde sé, estoy haciendo lo mismo.

Aquí está la sección relevante de mi archivo CMakeLists.txt.


set(CPACK_GENERATOR NSIS) 
set(CPACK_NSIS_PACKAGE_NAME "${EWS_APP_NAME}") 
set(CPACK_NSIS_DISPLAY_NAME "${EWS_APP_NAME}") 
set(CPACK_NSIS_CONTACT "${EWS_EMAIL}") 
set(CPACK_PACKAGE_EXECUTABLES "${EXE_TARGET_NAME}" "${EWS_APP_NAME}") 
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CMAKE_PROJECT_NAME}-${EWS_VERSION}") 

# this works 
set(CPACK_NSIS_MENU_LINKS "${EWS_WEBSITE}" "Homepage for ${EWS_APP_NAME}") 

# this doesn't 
set(CPACK_CREATE_DESKTOP_LINKS "${EXE_TARGET_NAME}") 

# Icon in the add/remove control panel. Must be an .exe file 
set(CPACK_NSIS_INSTALLED_ICON_NAME bin\\\\${EXE_TARGET_NAME}.exe) 

set(CPACK_NSIS_URL_INFO_ABOUT "${EWS_WEBSITE}") 
set(CPACK_NSIS_HELP_LINK "${EWS_WEBSITE}") 

¡Se agradecen todas las ideas o consejos para la eliminación de fallas!

Respuesta

9

intento de añadir esto a su CMakeLists.txt:

set (CPACK_NSIS_MODIFY_PATH "ON") 

creo que habría que añadir una página después de la licencia que le da la opción de añadir el directorio de instalación de la ruta, y añadir una opción para crear enlaces de escritorio.

3

Una solución temporal que descubrí es usar CPACK_NSIS_EXTRA_INSTALL_COMMANDS y CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS para insertar los comandos de creación/eliminación de enlace directamente.

set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " 
    CreateShortCut \\\"$DESKTOP\\\\${EWS_APP_NAME}.lnk\\\" \\\"$INSTDIR\\\\bin\\\\${EXE_TARGET_NAME}.exe\\\" 
") 

set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " 
    Delete \\\"$DESKTOP\\\\${EWS_APP_NAME}.lnk\\\" 
") 

me gusta mucho prefiero usar la más general (multiplataforma y?) CPACK_CREATE_DESKTOP_LINKS entorno, por lo que cualquier idea de seguimiento son apreciados. Pero esto funciona en un apuro.

0

Lo más probable es que no necesite citar $ {EXE_TARGET_NAME} ya que es una cadena.

+0

Cierto (solo un hábito en mi parte), pero no afecta el resultado. – metasim

1

Para otros que vienen a través de este hilo, está el CPACK_NSIS_CREATE_ICONS_EXTRA y CPACK_NSIS_DELETE_ICONS_EXTRA las variables CRealice que se pueden utilizar para crear accesos directos arbitrarias (menú, escritorio, etc. Iniciar). El lado eliminador de las cosas puede tener un pequeño problema, pero sigue siendo una forma relativamente fácil y flexible de obtener accesos directos donde los desee. La ventaja adicional es que también puede agregar argumentos de línea de comandos si es necesario. This short article explica cómo usar estas variables para crear y eliminar elementos del menú Inicio e incluye enlaces a documentación para otras variables útiles de NSIS. Debería ser bastante fácil utilizar el enfoque para atajos de escritorio con la información presentada allí.

1

estoy usando la siguiente macro para añadir enlaces tanto al menú de archivos de programa al escritorio

macro(prepareNSIS_Link linkName appName params) 
#prepare start menu links 
LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA " CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${linkName}.lnk' '$INSTDIR\\\\bin\\\\${appName}.exe' '${params}'") 
LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA " Delete '$SMPROGRAMS\\\\$START_MENU\\\\${linkName}.lnk'") 

#prepare desktop links 
LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA " CreateShortCut '$DESKTOP\\\\${linkName}.lnk' '$INSTDIR\\\\bin\\\\${appName}.exe' '${params}'") 
LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA " Delete '$DESKTOP\\\\${linkName}.lnk'") 
endmacro() 

Para crear un vínculo a para [installFolder]/bin/app.exe -some -parameters llaman como:

prepareNSIS_Link("My application" "app" "-some -parameters") 

Una vez que configure todos sus enlaces sean agradables y reemplace el punto y coma con nuevas líneas:

string (REPLACE ";" "\n" CPACK_NSIS_CREATE_ICONS_EXTRA "${CPACK_NSIS_CREATE_ICONS_EXTRA}") 
    string (REPLACE ";" "\n" CPACK_NSIS_DELETE_ICONS_EXTRA "${CPACK_NSIS_DELETE_ICONS_EXTRA}") 
Cuestiones relacionadas