1

我想使用已经存在的文件使用 CPack 和 NSIS 为 windows 打包我的项目, 我想在其中添加一个额外的GeneratorConfig.cmake命令,该命令将复制一个.ini名为.myProject.ini%APPDATA%/myProject/myProject.ini

这是 GeneratorConfig.cmake

SET(INSTALL_AN_ALREADY_EXISTING_DIR ".")
##########################################################################
## Begin NSIS Specific options
##------------------------------------------------------------------------
if(CPACK_GENERATOR MATCHES NSIS)
# Additional NSIS commands to uninstall start menu shortcuts
SET(CPACK_NSIS_DELETE_ICONS_EXTRA
  "Delete \"$SMPROGRAMS\\$MUI_TEMP\\${PROJECT_NAME}.lnk\" 
   StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2
   Delete \"$DESKTOP\\${PROJECT_NAME}.lnk\" ")
# The display name string that appears in the Windows Add/Remove Program control panel
SET(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME} ${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")
SET(CPACK_NSIS_DISPLAY_NAME_SET "TRUE")

# Extra NSIS commands that will be added to the end of the install Section, after your
# install tree is available on the target system.
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
    "CreateShortCut \"$SMPROGRAMS\\$STARTMENU_FOLDER\\${PROJECT_NAME}.lnk\" \"$INSTDIR\\.\\bin\\${PROJECT_EXE} \" -previousworkingdir \"$INSTDIR\\.\\bin\\app_icon.ico\"  
     StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2
     CreateShortCut \"$DESKTOP\\${PROJECT_NAME}.lnk\" \"$INSTDIR\\.\\bin\\${PROJECT_EXE} \" -previousworkingdir \"$INSTDIR\\.\\bin\\app_icon.ico\" 
     ")

# Extra commands to fix permissions of bin/licenses folder
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
   "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}
    ExecWait 'icacls \\\"$INSTDIR\\\\bin\\\\licenses\\\" /grant:r Users:\\\(OI\\\)\\\(CI\\\)\\\(F\\\)'
    ")

# A path to the executable that contains the installer icon.
SET(CPACK_NSIS_INSTALLED_ICON_NAME "${PROJECT__DIR}\\bin\\${PROJECT_EXE}")

# The default installation directory presented to the end user by the NSIS installer
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")

# Title displayed at the top of the installer
SET(CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME} ${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")

SET(CPACK_NSIS_PAGE_COMPONENTS " ")

SET(CPACK_NSIS_MUI_FINISHPAGE_RUN ${PROJECT_EXE})
endif(CPACK_GENERATOR MATCHES NSIS)
##------------------------------------------------------------------------
## End NSIS Specific options
##########################################################################

我尝试使用下面的代码来执行此操作,但这会构建包但不会复制到myProject.ini任何地方。

SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
  "CreateDirectory \"$ENV{APPDATA}\\myProject\",
   SetOutPath \"$ENV{APPDATA}\\myProject\",
   File \"myProject.ini\" 
   ")

任何帮助或建议将不胜感激。

4

1 回答 1

1

据我所知,您使用的“\”符号不足。

澄清一下:该字符串被评估两次,一次由 CMake 评估,一次由 CPack 评估,并且每次发生诸如 \->\ 和 \" -> " 之类的替换。请检查生成的 nsis 项目以了解实际生成的命令是什么以及是否正确设置了所有 '"'。

总结一下:尝试使用这个:

SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
  "CreateDirectory \\\"$ENV{APPDATA}\\\\myProject\\\",
   SetOutPath \\\"$ENV{APPDATA}\\\\myProject\\\",
   File \\\"myProject.ini\\\" 
   ")
于 2015-02-18T11:28:45.523 回答