CPack Inno Setup 產生器

於 3.27 版本新增。

Inno Setup 是 Jordan Russell 和 Martijn Laan 開發的 Windows 程式免費安裝程式 (https://jrsoftware.org/isinfo.php)。

本文件說明 Inno Setup 產生器特定的選項。

此產生器提供許多選項,例如元件。可惜的是,並非所有功能(例如元件相依性)目前都受到 Inno Setup 的支援,因此目前產生器會忽略它們。

CPack 需要 Inno Setup 6 或更新版本。

於 3.30 版本新增:此產生器現在可在非 Windows 主機上使用,但需要 Wine 來執行 Inno Setup 工具。

CPack Inno Setup 產生器特定的變數

您可以使用以下變數來變更 CPack INNOSETUP 產生器的行為

一般

以下變數均非 Inno Setup 產生器運作所必需設定。如果變數在下方被標記為強制性但未設定,則會採用其預設值。

這些變數也可以包含 Inno Setup 常數,例如 {app}。如需更多資訊,請參閱 Inno Setup 的文件。

如果您被要求提供任何檔案的路徑,您一律可以提供絕對路徑,或在大多數情況下,提供相對於由 install() 指令安裝的所有檔案所在的頂層目錄的相對路徑。

CPack 會嘗試為您逸出引號和其他特殊字元。但是,使用特殊字元可能會導致問題。

以下變數簡化了 CMake 中 Inno Setup 的使用方式

CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT

Inno Setup 僅使用 yesno 作為布林格式,同時 CMake 使用許多替代格式,例如 ONOFF。啟用此選項可進行自動轉換。

請考慮以下範例

set(CMAKE_INNOSETUP_SETUP_AllowNoIcons OFF)

如果啟用此選項,則會在輸出腳本中建立以下行: AllowNoIcons=no。否則,會建立以下錯誤行: AllowNoIcons=OFF

轉換會在每個 Inno Setup 特定的變數中啟用。

強制性

預設值

ON

設定特定變數

CPACK_INNOSETUP_ARCHITECTURE

x86x64arm64ia64 其中之一。此變數指定安裝程式的目標架構。這也會影響所使用的「程式檔案」資料夾或登錄機碼。

CPack 會嘗試使用嘗試編譯來判斷正確的值 (請參閱 CMAKE_SIZEOF_VOID_P),但也可以手動指定此選項 (尤其是在使用 ia64 或跨平台編譯時)。

強制性

預設值

根據嘗試編譯的結果,為 x86x64 其中之一

CPACK_INNOSETUP_INSTALL_ROOT

如果您不希望安裝程式在「程式檔案」下建立安裝目錄,則必須在此處指定安裝根目錄。

安裝的完整目錄將為:${CPACK_INNOSETUP_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}

強制性

預設值

{autopf}

CPACK_INNOSETUP_ALLOW_CUSTOM_DIRECTORY

如果啟用,安裝程式會允許使用者變更安裝目錄,並提供額外的精靈頁面。

強制性

預設值

ON

CPACK_INNOSETUP_PROGRAM_MENU_FOLDER

所建立「開始」功能表資料夾的初始名稱。

如果此變數設定為 .,則不會建立個別的資料夾,應用程式捷徑將會出現在最上層的「開始」功能表資料夾中。

強制性

預設值

CPACK_PACKAGE_NAME 的值

CPACK_INNOSETUP_LANGUAGES

您希望 Inno Setup 包含的語言的分號分隔清單

目前可用的語言:armenianbrazilianPortuguesebulgariancatalancorsicanczechdanishdutchenglishfinnishfrenchgermanhebrewicelandicitalianjapanesenorwegianpolishportugueserussianslovakslovenianspanishturkishukrainian。此清單可能會因 Inno Setup 版本而異。

強制性

預設值

英文

CPACK_INNOSETUP_IGNORE_LICENSE_PAGE

如果您未使用 CPACK_RESOURCE_FILE_LICENSE 來指定授權檔案,CPack 會使用檔案以進行示範。如果您希望安裝程式完全忽略授權檔案,您可以啟用此選項。

強制性

預設值

OFF

CPACK_INNOSETUP_IGNORE_README_PAGE

如果您未使用 CPACK_RESOURCE_FILE_README 來指定讀我檔案,CPack 會使用檔案以進行示範。如果您希望安裝程式完全忽略讀我檔案,您可以啟用此選項。使用自訂讀我檔案時,請務必停用此選項。

強制性

預設值

ON

CPACK_INNOSETUP_PASSWORD

啟用密碼保護和使用給定密碼進行檔案加密。

強制性

CPACK_INNOSETUP_USE_MODERN_WIZARD

啟用 Inno Setup 提供的現代外觀。如果關閉此選項,則會改用傳統樣式。影像和圖示檔案也會受到影響。

強制性

預設值

基於相容性原因,預設值為 OFF

CPACK_INNOSETUP_ICON_FILE

自訂安裝程式 .ico 檔案的路徑。

使用 CPACK_PACKAGE_ICON 來客製化精靈中顯示的點陣圖檔案。

強制性

CPACK_INNOSETUP_SETUP_<directive>

此群組允許調整 Inno Setup 提供的任何 [Setup] 區段指令,其中 directive 為其名稱。

以下是一些範例

set(CPACK_INNOSETUP_SETUP_WizardSmallImageFile "my_bitmap.bmp")
set(CPACK_INNOSETUP_SETUP_AllowNoIcons OFF) # This requires CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT to be on

所有這些變數的優先順序都高於其他變數。請考慮以下範例

set(CPACK_INNOSETUP_SETUP_Password "admin")
set(CPACK_INNOSETUP_PASSWORD "secret")

密碼最終將為 admin,因為 CPACK_INNOSETUP_PASSWORD 的優先順序低於 CPACK_INNOSETUP_SETUP_Password

強制性

檔案特定變數

雖然由 install() 指令安裝的所有檔案都會自動處理並新增至安裝程式,但仍有一些變數可用於客製化安裝過程。

在快捷方式 (例如 CPACK_CREATE_DESKTOP_LINKS) 或 [Run] 項目中使用可執行檔(僅限 .exe.com)之前,您必須將原始檔名(不含路徑和副檔名)新增至 CPACK_PACKAGE_EXECUTABLES,並為它們建立開始功能表快捷方式。

如果您有兩個具有相同原始名稱的檔案(例如 a/executable.exeb/executable.com),則會在該區段中建立兩個項目。這將導致未定義的行為,因此不建議這樣做。

CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS

此變數應包含以分號分隔的清單,其中包含 pathinstruction 配對,可用於自訂為每個檔案或目錄自動建立的安裝命令。

CPack 會為每個檔案建立以下 Inno Setup 指令...

Source: "absolute\path\to\my_file.txt"; DestDir: "{app}"; Flags: ignoreversion

...並為每個目錄建立以下程式碼行

Name: "{app}\my_folder"

您可能想要變更 my_file.txt 的目的地目錄或旗標。由於我們也可以提供相對路徑,您想要擁有的程式碼行如下

Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall

您可以使用 my_file.txt 作為 path,並使用 Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall 作為 instruction 來完成此操作。

您必須注意跳脫字元問題。因此,CMake 命令會是

set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS "my_file.txt;Source: \\\"my_file.txt\\\"\\; DestDir: \\\"{userdocs}\\\"\\; Flags: ignoreversion uninsneveruninstall")

為了提高可讀性,您應該使用 CPACK_VERBATIM_VARIABLES 或將指令放入單獨的 CPack 專案設定檔中來規避跳脫字元問題。

如果您自訂特定檔案的安裝指令,您會失去與其元件的連線。為了規避此問題,請手動新增 Components: <component>。您也需要在自訂區段中自行新增其快捷方式和 [Run] 項目,因為 CPACK_PACKAGE_EXECUTABLES 將不再找到該可執行檔。

以下是另一個範例(注意:您必須規避跳脫字元問題才能使範例正常運作)

set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS
    "component1/my_folder" "Name: \"{userdocs}\\my_folder\"\; Components: component1"
    "component2/my_folder2/my_file.txt" "Source: \"component2\\my_folder2\\my_file.txt\"\; DestDir: \"{app}\\my_folder2\\my_file.txt\"\; Flags: ignoreversion uninsneveruninstall\; Components: component2")
強制性

此變數應包含以分號分隔的清單,其中包含 linklink name 配對,可用於將快捷方式新增到開始功能表資料夾中,除了可執行檔的快捷方式之外(請參閱 CPACK_PACKAGE_EXECUTABLES)。雖然 link name 是標籤,但 link 可以是 URL 或相對於安裝目錄的路徑。

以下是一個範例

set(CPACK_INNOSETUP_MENU_LINKS
    "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html"
    "CMake Help" "https://cmake.dev.org.tw" "CMake Web Site")
強制性

如果開啟此選項,則會自動將應用程式解除安裝程式的快捷方式新增到開始功能表資料夾中。

強制性

預設值

OFF

CPACK_INNOSETUP_RUN_EXECUTABLES

CPACK_PACKAGE_EXECUTABLES 中指定的、以分號分隔的清單,使用者可以在安裝程式完成時執行這些可執行檔。

它們會在內部新增到 [Run] 區段。

強制性

元件特定變數

產生器支援元件以及下載的元件。但是,有些元件的功能尚未支援(尤其是元件相依性)。這些變數目前會被忽略。

如果元件在技術上有父群組,CPack 將會變更 Inno Setup 中的元件名稱。如果您有元件 component 及其父群組 group,請考慮在 Inno Setup 腳本中使用 group\component 作為元件名稱。

以下是一些適用於元件的其他變數

CPACK_INNOSETUP_<compName>_INSTALL_DIRECTORY

如果您不希望將元件 compName 安裝在 {app} 下,您必須在此處指定其安裝目錄。

強制性

CPACK_INNOSETUP_VERIFY_DOWNLOADS

此選項僅影響下載的元件。

如果開啟此選項,則會在編譯和下載時計算下載封存的雜湊值。只有在它們相符時,安裝程式才會繼續。

強制性

預設值

ON

編譯和腳本特定變數

CPACK_INNOSETUP_EXECUTABLE

Inno Setup 腳本編譯器命令的檔案名稱。

強制性

預設值

ISCC

CPACK_INNOSETUP_EXECUTABLE_ARGUMENTS

Inno Setup 腳本編譯器命令的額外命令列選項的分號分隔的清單

例如:/Qp;/Smysigntool=$p

請注意跳脫字元問題

強制性

CPACK_INNOSETUP_DEFINE_<macro>

此群組允許將自訂 define 指示詞作為命令列選項新增到 Inno Setup Preprocessor 命令中。每個項目都會模擬 #define public <macro> 指示詞。其巨集可從任何位置存取(public),因此也可以在額外的腳本檔案中使用。

巨集名稱不得包含任何特殊字元。如需詳細規則,請參閱 Inno Setup Preprocessor 文件。

請考慮以下範例

# The following line emulates: #define public MyMacro "Hello, World!"
set(CPACK_INNOSETUP_DEFINE_MyMacro "Hello, World!")

此時,您可以在任何位置使用 MyMacro。例如,在以下額外腳本中

AppComments={#emit "'My Macro' has the value: " + MyMacro}

請注意跳脫字元問題

強制性

CPACK_INNOSETUP_EXTRA_SCRIPTS

要處理的其他 .iss 腳本檔案路徑的分號分隔的清單

它們會在使用 #include 指示詞的輸出腳本檔案頂部內部包含。

您可以在檔案中新增任何區段來擴充安裝程式(例如,新增其他工作或登錄機碼)。在擴充 [Setup] 區段時,請優先使用 CPACK_INNOSETUP_SETUP_<directive>

強制性

CPACK_INNOSETUP_CODE_FILES

要處理的其他 Pascal 檔案路徑的分號分隔的清單

此變數實際上與 CPACK_INNOSETUP_EXTRA_SCRIPTS 相同,只是您不必在檔案頂部新增 [Code]。請勿在程式碼檔案中變更目前的區段。這將導致未定義的行為!請將它們視為一般 Pascal 腳本。

程式碼檔案包含在輸出腳本的最底部。

強制性