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 僅使用
yes
或no
作為布林格式,而 CMake 使用許多替代格式,例如ON
或OFF
。 開啟此選項可啟用自動轉換。考慮以下範例
set(CMAKE_INNOSETUP_SETUP_AllowNoIcons OFF)
若開啟此選項,則會在輸出腳本中建立以下行:
AllowNoIcons=no
。 否則,會建立以下錯誤的行:AllowNoIcons=OFF
轉換功能在每個 Inno Setup 特定變數中皆已啟用。
- 強制性:
是
- 預設:
開啟 (ON)
安裝程式特定變數¶
- CPACK_INNOSETUP_ARCHITECTURE¶
x86
、x64
、arm64
或ia64
其中之一。 此變數指定安裝程式的目標架構。 這也會影響使用的「程式檔案」資料夾或登錄機碼。CPack 嘗試透過嘗試編譯 (請參閱
CMAKE_SIZEOF_VOID_P
) 來判斷正確的值,但此選項也可以手動指定 (尤其是在使用ia64
或跨平台編譯時)。- 強制性:
是
- 預設:
根據嘗試編譯的結果,為
x86
或x64
- 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_INNOSETUP_LANGUAGES¶
您希望 Inno Setup 包含的語言的 分號分隔清單。
目前可用的語言:
armenian
、brazilianPortuguese
、bulgarian
、catalan
、corsican
、czech
、danish
、dutch
、english
、finnish
、french
、german
、hebrew
、icelandic
、italian
、japanese
、norwegian
、polish
、portuguese
、russian
、slovak
、slovenian
、spanish
、turkish
和ukrainian
。 此清單可能會因 Inno Setup 版本而異。- 強制性:
是
- 預設:
english
- CPACK_INNOSETUP_IGNORE_LICENSE_PAGE¶
若您未使用
CPACK_RESOURCE_FILE_LICENSE
指定授權檔案,CPack 會使用一個檔案作為示範用途。 若您希望安裝程式完全忽略授權檔案,則可以啟用此選項。- 強制性:
是
- 預設:
關閉 (OFF)
- CPACK_INNOSETUP_IGNORE_README_PAGE¶
若您未使用
CPACK_RESOURCE_FILE_README
指定 readme 檔案,CPack 會使用一個檔案作為示範用途。 若您希望安裝程式完全忽略 readme 檔案,則可以啟用此選項。 使用自訂 readme 檔案時,請務必停用此選項。- 強制性:
是
- 預設:
開啟 (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.exe
和 b/executable.com
),則會在區段中建立兩個項目。 這會導致未定義的行為,因此不建議使用。
- CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS¶
此變數應包含
path
、instruction
配對的 分號分隔清單,可用於自訂為每個檔案或目錄自動建立的安裝命令。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")
- 強制性:
否
- CPACK_INNOSETUP_MENU_LINKS¶
此變數應包含
link
、link 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")
- 強制性:
否
- CPACK_INNOSETUP_CREATE_UNINSTALL_LINK¶
若開啟此選項,則會自動將應用程式解除安裝程式的捷徑新增至「開始」功能表資料夾。
- 強制性:
是
- 預設:
關閉 (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 腳本。程式碼檔案包含在輸出腳本的最底端。
- 強制性:
否