2010-04-14 4 views
9

J'utilise le générateur de paquets NSIS dans CMake 2.8.1 pour distribuer une application Qt. Tout fonctionne bien ... sauf l'utilisation de CPACK_CREATE_DESKTOP_LINKS pour créer un lien de bureau à l'application. J'ai regardé à travers le CMake source (y compris sa propre définition d'installation "bootstrap" pour Windows), et autant que je sache, je fais la même chose.Création d'une icône de bureau Windows dans CMake + CPack + NSIS

Voici la section pertinente de mon fichier 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}") 

Toutes les idées ou conseils de débogage sont appréciés!

Répondre

9

essayer d'ajouter ceci à votre CMakeLists.txt:

set (CPACK_NSIS_MODIFY_PATH "ON") 

Je pense qu'il faut ajouter une page après la licence qui donne la possibilité d'ajouter le répertoire d'installation sur le chemin, et ajouter une option pour créer des liens de bureau.

3

Un moyen de contourner j'ai compris est d'utiliser CPACK_NSIS_EXTRA_INSTALL_COMMANDS et CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS pour insérer les commandes de création/suppression de lien directement.

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\\\" 
") 

J'utilise bien plutôt le plus général (et multi-plateforme?) Mise en CPACK_CREATE_DESKTOP_LINKS, donc toutes les idées sont appréciés suivi à. Mais cela fonctionne à la rigueur.

0

Vous n'avez probablement pas besoin de citer $ {EXE_TARGET_NAME} car il s'agit d'une chaîne.

+0

Assez vrai (juste une habitude sur mon partie), mais n'affecte pas le résultat. – metasim

1

Pour d'autres qui viennent sur ce fil, il y a le CPACK_NSIS_CREATE_ICONS_EXTRA et CPACK_NSIS_DELETE_ICONS_EXTRA les variables CMake qui peuvent être utilisées pour créer des raccourcis arbitraires (menu Démarrer, bureau, etc.). Le côté suppression des choses peut avoir un petit gotcha, mais c'est toujours un moyen relativement facile et flexible d'obtenir des raccourcis là où vous le voulez. Le bonus supplémentaire est que vous pouvez également ajouter des arguments de ligne de commande si nécessaire. This short article explique comment utiliser ces variables pour créer et supprimer des éléments du menu Démarrer et inclut des liens vers la documentation pour d'autres variables NSIS utiles. Il devrait être assez facile d'utiliser l'approche pour les raccourcis de bureau avec les informations présentées ici.

1

J'utilise la macro suivante pour ajouter des liens vers le menu fichiers de programme sur le bureau

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() 

Pour créer un lien vers pour [installFolder]/bin/app.exe -some -parameters appeler comme:

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

Une fois que vous définissez tous vos liens soyez gentils et remplacez les points-virgules par de nouvelles lignes:

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}") 
Questions connexes