2010-04-14 40 views
9

我在CMake 2.8.1中使用NSIS包生成器來分發Qt應用程序。一切工作正常......除了使用CPACK_CREATE_DESKTOP_LINKS創建桌面鏈接到應用程序。在CMake + CPack + NSIS中創建Windows桌面圖標

我已經瀏覽了CMake source(包括它自己的「bootstrap」安裝定義的窗口),並且據我所知我正在做同樣的事情。

這是我的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}") 

任何想法或調試技巧,讚賞!

回答

9

嘗試添加這對您的CMakeLists.txt

set (CPACK_NSIS_MODIFY_PATH "ON") 

我覺得應該是給人以安裝目錄添加到路徑,並添加一個選項來創建桌面鏈接的選項許可後添加頁面。

3

我想到的一種解決方法是使用CPACK_NSIS_EXTRA_INSTALL_COMMANDSCPACK_NSIS_EXTRA_UNINSTALL_COMMANDS直接插入鏈接創建/刪除命令。

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

我寧願使用更普遍的(和跨平臺?)CPACK_CREATE_DESKTOP_LINKS設置,所以任何後續的想法表示讚賞。但是這個工作在一個捏。

0

您很可能不需要引用$ {EXE_TARGET_NAME},因爲它是一個字符串。

+0

真夠的(只是我的習慣部分),但不影響結果。 – metasim 2010-04-16 20:04:04

1

對於其他人誰遇到這個線程,還有的CPACK_NSIS_CREATE_ICONS_EXTRA和可用於創建任意快捷方式CPACK_NSIS_DELETE_ICONS_EXTRA CMake的變量(開始菜單,桌面等)。事物的刪除方面可能有一個小問題,但它仍然是一種相對容易和靈活的方法,可以在你想要的地方獲得快捷方式。額外的好處是,如果需要,您還可以添加命令行參數。 This short article解釋瞭如何使用這些變量來創建和刪除開始菜單項,幷包含指向其他有用NSIS變量文檔的鏈接。使用該方法可以很容易地將桌面快捷方式與其中顯示的信息一起使用。

1

我使用下面的宏鏈接都將程序文件菜單添加到桌面

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

要創建鏈接,爲[installFolder]/bin/app.exe -some -parameters稱其爲:

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

一旦您設置把你所有的鏈接都改好,並用新行代替分號:

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