Настройка установщика NSIS с помощью CPACK

Я пытаюсь настроить установщик NSIS с помощью CMAKE и CPACK. В частности, я хотел бы включить в сгенерированный проект .nsi внешний скрипт.

Что-то типа:

!include "@SCRIPT_PATH@\@[email protected]"

Для этого я следую приведенному здесь примеру: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/NSISAdTips

Я скопировал файл сценария шаблона (NSIS.template.in) и добавил необходимые команды. Теперь мне нужно настроить две переменные "@SCRIPT_PATH@ и @SCRIPT_NAME@ соответственно.

Я попытался установить их как стандартные переменные CMAKE.

SET(SCRIPT_PATH "somePath")
SET(SCRIPT_NAME "someName")

но CPACK просто оставляет переменные шаблона пустыми

Любая подсказка?


person Pierluigi    schedule 15.01.2014    source источник


Ответы (1)


Я нашел рабочее решение.

Начните с добавления заполнителя в основной NSIS.template.in, куда вы хотите вставить новые команды, например:

@NSIS_ADDITIONAL_SCRIPT@

Затем вам нужно настроить файл шаблона, содержащий параметры, которые будут переданы в сборку CPACK.

CPackOptions.cmake содержит следующее:

SET(NSIS_ADDITIONAL_SCRIPT ${NSIS_ADDITIONAL_SCRIPT})

Затем в вашем сценарии CMAKE перед включением CPACK вам нужно установить переменную NSIS_ADDITIONAL_SCRIPT (путь переработан, чтобы иметь правильный набор обратных косых черт в оконных системах)

SET(scriptPath "[path to the script location]" )
FILE(TO_NATIVE_PATH ${scriptPath} scriptPath )
STRING(REPLACE "\\" "\\\\" scriptPath  ${scriptPath} ) 

и, наконец, настройте файл CPackOption.cmake (следите за правильным количеством косых черт и запятых)

SET(NSIS_ADDITIONAL_SCRIPT " \"!include \\\"${scriptPath}\\\" \\n  \" ")
CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/CMakeConf/CPackOptions.cmake ${PROJECT_BINARY_DIR}/CPackOptions.cmake)

Если вы все делаете правильно:

  • настроив и сгенерировав сценарий CMAKE, вы найдете файл CPackOptions.cmake в папке сборки вашего проекта.
  • Затем этот настроенный файл будет использоваться CPACK для заполнения переменной, добавленной в NSIStemplate.in.
  • Окончательный сгенерированный файл project.nsi будет содержать дополнительную инструкцию !include.
person Pierluigi    schedule 29.01.2014