1

CMAKE と CPACK を使用して NSIS インストーラーをカスタマイズしようとしています。特に、生成された project.nsi に外部スクリプトを含めたいと考えています。

何かのようなもの:

!include "@SCRIPT_PATH@\@SCRIPT_NAME@.nsh"

そのために、ここに示す例に従っています: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/NSISAdvancedTips

テンプレート スクリプト ファイル (NSIS.template.in) をコピーし、必要なコマンドを追加しました。2 つの変数 "@SCRIPT_PATH@ と @SCRIPT_NAME@ を適切に構成する必要があります。

標準のCMAKE変数のように設定しようとしました

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

ただし、テンプレート変数はCPACKによって単に空白のままになります

どんな手掛かり?

4

1 に答える 1

1

私は実用的な解決策を見つけました。

新しいコマンドを挿入したいメインの NSIS.template.in にプレースホルダーを追加することから始めます。例えば:

@NSIS_ADDITIONAL_SCRIPT@

次に、CPACK ビルドに渡されるオプションを含むテンプレート ファイルを構成する必要があります。

CPackOptions.cmake には以下が含まれます。

SET(NSIS_ADDITIONAL_SCRIPT ${NSIS_ADDITIONAL_SCRIPT})

次に、CPACK をインクルードする前に、CMAKE スクリプトで 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 が見つかります。
  • この構成されたファイルは、NSIStemplate.in に追加された変数を埋めるために CPACK によって使用されます。
  • 最終的に生成された project.nsi には、追加の !include 命令が含まれます。
于 2014-01-29T16:14:27.790 に答える