Kotlin 編譯器選項
Kotlin 的每個版本都包含適用於支援目標的編譯器: JVM、JavaScript 和適用於支援平台的原生二進位檔。
這些編譯器由以下項目使用:
- IDE,當您點擊 Kotlin 專案的「Compile(編譯)」或「Run(執行)」按鈕時。
- Gradle,當您在控制台或 IDE 中呼叫
gradle build
時。 - Maven,當您在控制台或 IDE 中呼叫
mvn compile
或mvn test-compile
時。
您也可以從命令行手動執行 Kotlin 編譯器,如使用命令行編譯器教學課程中所述。
編譯器選項 (Compiler options)
Kotlin 編譯器具有許多選項可用於調整編譯過程。 此頁面列出了不同目標的編譯器選項,以及每個選項的描述。
有多種方法可以設定編譯器選項及其值(編譯器引數):
- 在 IntelliJ IDEA 中,在Settings/Preferences(設定/偏好設定) | Build, Execution, Deployment(建置、執行、部署) | Compiler(編譯器) | **Kotlin Compiler(Kotlin 編譯器)**中的 **Additional command line parameters(其他命令行參數)**文字框中輸入編譯器引數。
- 如果您使用 Gradle,請在 Kotlin 編譯任務的
compilerOptions
屬性中指定編譯器引數。 有關詳細資訊,請參閱 Gradle 編譯器選項 (Gradle compiler options)。 - 如果您使用 Maven,請在 Maven 外掛程式節點的
<configuration>
元素中指定編譯器引數。 有關詳細資訊,請參閱 Maven。 - 如果您執行命令行編譯器,請將編譯器引數直接新增到公用程式呼叫或將它們寫入 argfile。
例如:
$ kotlinc hello.kt -include-runtime -d hello.jar
在 Windows 上,當您傳遞包含分隔符號字元(空格、=
、;
、,
)的編譯器引數時,請用雙引號("
)括住這些引數。
$ kotlinc.bat hello.kt -include-runtime -d "My Folder\hello.jar"
常用選項 (Common options)
以下選項是所有 Kotlin 編譯器通用的。
-version
顯示編譯器版本。
-nowarn
阻止編譯器在編譯期間顯示警告。
-Werror
將任何警告轉換為編譯錯誤。
-Wextra
啟用額外的宣告、表達式和類型編譯器檢查,如果為 true,則發出警告。
-verbose
啟用詳細記錄輸出,其中包括編譯過程的詳細資訊。
-script
評估 Kotlin 腳本檔案。 使用此選項呼叫時,編譯器會執行給定引數中的第一個 Kotlin 腳本 (*.kts
) 檔案。
-help (-h)
顯示用法資訊並退出。 僅顯示標準選項。
要顯示進階選項,請使用 -X
。
-X
顯示有關進階選項的資訊並退出。 這些選項目前不穩定: 它們的名稱和行為可能會在沒有通知的情況下更改。
-kotlin-home path
指定 Kotlin 編譯器的自定義路徑,用於發現執行時函式庫。
-P plugin:pluginId:optionName=value
將選項傳遞給 Kotlin 編譯器外掛程式。 核心外掛程式及其選項列在文件中的 核心編譯器外掛程式 (Core compiler plugins) 部分。
-language-version version
提供與指定 Kotlin 版本的原始碼相容性。
-api-version version
允許僅使用來自指定 Kotlin 版本捆綁函式庫的宣告。
-progressive
為編譯器啟用漸進模式。
在漸進模式下,不穩定程式碼的棄用和錯誤修復會立即生效, 而不是經過正常的移轉週期。 以漸進模式編寫的程式碼是向後相容的; 但是,以 非漸進模式編寫的程式碼可能會在漸進模式下導致編譯錯誤。
@argfile
從給定檔案讀取編譯器選項。 此類檔案可以包含帶有值的編譯器選項 和原始碼檔案的路徑。 選項和路徑應以空格分隔。 例如:
-include-runtime -d hello.jar hello.kt
要傳遞包含空格的值,請用單引號(')或雙引號(")將其括起來。 如果值包含 其中的引號,請使用反斜線(\)將其逸出。
-include-runtime -d 'My folder'
您也可以傳遞多個引數檔案,例如,將編譯器選項與原始碼檔案分開。
$ kotlinc @compiler.options @classes
如果檔案位於與目前目錄不同的位置,請使用相對路徑。
$ kotlinc @options/compiler.options hello.kt
-opt-in annotation
啟用 需要選擇加入 (requires opt-in) 的 API 的用法,並使用給定完整名稱的需求註解。
-Xsuppress-warning
在整個專案中全域性 抑制特定警告,例如:
kotlinc -Xsuppress-warning=NOTHING_TO_INLINE -Xsuppress-warning=NO_TAIL_CALLS_FOUND main.kt
Kotlin/JVM 編譯器選項 (Compiler options)
用於 JVM 的 Kotlin 編譯器將 Kotlin 原始碼檔案編譯為 Java 類別檔案。
用於 Kotlin 到 JVM 編譯的命令行工具是 kotlinc
和 kotlinc-jvm
。
您也可以使用它們來執行 Kotlin 腳本檔案。
除了常用選項外,Kotlin/JVM 編譯器還具有以下列出的選項。
-classpath path (-cp path)
在指定路徑中搜尋類別檔案。 使用系統路徑分隔符號分隔類別路徑的元素(Windows 上為 ;,macOS/Linux 上為 :)。 類別路徑可以包含檔案和目錄路徑、ZIP 或 JAR 檔案。
-d path
將產生的類別檔案放入指定位置。 該位置可以是目錄、ZIP 或 JAR 檔案。
-include-runtime
將 Kotlin 執行時包含到產生的 JAR 檔案中。 使產生的封存檔可在任何啟用 Java 的環境上執行。
-jdk-home path
如果與預設 JAVA_HOME
不同,則使用自定義 JDK 主目錄包含到類別路徑中。
-Xjdk-release=version
指定產生的 JVM 位元組碼的目標版本。 將類別路徑中 JDK 的 API 限制為指定的 Java 版本。
自動設定 -jvm-target version
。
可能的值為 1.8
、9
、10
、...、21
。
無法保證此選項對每個 JDK 發行版都有效。
-jvm-target version
指定產生的 JVM 位元組碼的目標版本。 可能的值為 1.8
、9
、10
、...、21
。
預設值為 1.8
。
-java-parameters
產生 Java 1.8 反射的元數據,用於方法參數。
-module-name name (JVM)
為產生的 .kotlin_module
檔案設定自定義名稱。
-no-jdk
不要自動將 Java 執行時包含到類別路徑中。
-no-reflect
不要自動將 Kotlin 反射 (kotlin-reflect.jar
) 包含到類別路徑中。
-no-stdlib (JVM)
不要自動將 Kotlin/JVM stdlib (kotlin-stdlib.jar
) 和 Kotlin 反射 (kotlin-reflect.jar
)
包含到類別路徑中。
-script-templates classnames[,]
腳本定義模板類別。 使用完整類別名稱,並用逗號 (,) 分隔它們。
Kotlin/JS 編譯器選項 (Compiler options)
用於 JS 的 Kotlin 編譯器將 Kotlin 原始碼檔案編譯為 JavaScript 程式碼。
用於 Kotlin 到 JS 編譯的命令行工具是 kotlinc-js
。
除了常用選項外,Kotlin/JS 編譯器還具有以下列出的選項。
-target {es5|es2015}
為指定的 ECMA 版本產生 JS 檔案。
-libraries path
帶有 .meta.js
和 .kjsm
檔案的 Kotlin 函式庫路徑,以系統路徑分隔符號分隔。
-main {call|noCall}
定義是否應在執行時呼叫 main
函數。
-meta-info
產生帶有元數據的 .meta.js
和 .kjsm
檔案。 建立 JS 函式庫時使用此選項。
-module-kind {umd|commonjs|amd|plain}
編譯器產生的 JS 模組種類:
umd
- 通用模組定義 (Universal Module Definition) 模組commonjs
- CommonJS 模組amd
- 異步模組定義 (Asynchronous Module Definition) 模組plain
- 普通 JS 模組
要了解有關不同種類的 JS 模組及其區別的更多資訊, 請參閱這篇文章。
-no-stdlib (JS)
不要自動將預設 Kotlin/JS stdlib 包含到編譯依賴項中。
-output filepath
設定編譯結果的目標檔案。 該值必須是 .js
檔案的路徑,包括其名稱。
-output-postfix filepath
將指定檔案的內容新增到輸出檔案的末尾。
-output-prefix filepath
將指定檔案的內容新增到輸出檔案的開頭。
-source-map
產生原始碼對應表 (source map)。
-source-map-base-dirs path
將指定路徑用作基準目錄。 基準目錄用於計算原始碼對應表中的相對路徑。
-source-map-embed-sources {always|never|inlining}
將原始碼檔案嵌入到原始碼對應表中。
-source-map-names-policy {simple-names|fully-qualified-names|no}
將您在 Kotlin 程式碼中宣告的變數和函數名稱新增到原始碼對應表中。
設定 | 描述 | 範例輸出 |
---|---|---|
simple-names | 新增變數名稱和簡單函數名稱。 (預設) | main |
fully-qualified-names | 新增變數名稱和完整函數名稱。 | com.example.kjs.playground.main |
no | 不新增變數或函數名稱。 | N/A |
-source-map-prefix
將指定字首新增到原始碼對應表中的路徑。
Kotlin/Native 編譯器選項 (Compiler options)
Kotlin/Native 編譯器將 Kotlin 原始碼檔案編譯為 支援平台 的原生二進位檔。
用於 Kotlin/Native 編譯的命令行工具是 kotlinc-native
。
除了常用選項外,Kotlin/Native 編譯器還具有以下列出的選項。
-enable-assertions (-ea)
在產生的程式碼中啟用執行時斷言。
-g
啟用發出除錯資訊。 此選項降低了最佳化等級,不應與
-opt
選項結合使用。
-generate-test-runner (-tr)
產生一個應用程式,用於從專案執行單元測試。
-generate-no-exit-test-runner (-trn)
產生一個應用程式,用於在沒有明確進程退出的情況下執行單元測試。
-include-binary path (-ib path)
將外部二進位檔封裝在產生的 klib 檔案中。
-library path (-l path)
與函式庫連結。 要了解有關在 Kotlin/Native 專案中使用函式庫的資訊,請參閱 Kotlin/Native 函式庫 (Kotlin/Native libraries)。
-library-version version (-lv version)
設定函式庫版本。
-list-targets
列出可用的硬體目標。
-manifest path
提供 manifest addend 檔案。
-module-name name (Native)
指定編譯模組的名稱。 此選項還可用於指定匯出到 Objective-C 的宣告的名稱字首: 如何為我的 Kotlin 框架指定自定義 Objective-C 字首/名稱?
-native-library path (-nl path)
包含原生位元碼函式庫。
-no-default-libs
停用將使用者程式碼與編譯器隨附的預先建置的平台函式庫連結。
-nomain
假設 main
進入點由外部函式庫提供。
-nopack
不要將函式庫封裝到 klib 檔案中。
-linker-option
在二進位檔建置期間將引數傳遞給連結器。 這可用於與某些原生函式庫連結。
-linker-options args
在二進位檔建置期間將多個引數傳遞給連結器。 用空格分隔引數。
-nostdlib
不要與 stdlib 連結。
-opt
啟用編譯最佳化並產生具有更好執行時效能的二進位檔。 不建議將其與
降低最佳化等級的 -g
選項結合使用。
-output name (-o name)
設定輸出檔案的名稱。
-entry name (-e name)
指定限定進入點名稱。
-produce output (-p output)
指定輸出檔案種類:
program
static
dynamic
framework
library
bitcode
-repo path (-r path)
函式庫搜尋路徑。 有關更多資訊,請參閱 函式庫搜尋順序 (Library search sequence)。
-target target
設定硬體目標。 要查看可用目標的列表,請使用 -list-targets
選項。