问题描述
默认的Kotlin本机项目gradle配置如下:
plugins {
kotlin("multiplatform") version "1.4.10"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
kotlin {
val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when {
hostOs == "Mac OS X" -> macosX64("native")
hostOs == "Linux" -> linuxX64("native")
isMingwX64 -> mingwX64("native")
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
}
nativeTarget.apply {
binaries {
executable {
entryPoint = "main"
}
}
}
sourceSets {
val nativeMain by getting
val nativeTest by getting
}
}
这种配置只能为单个目标生成二进制文件。如何调整配置,以使单一构建会为所有提到的目标(Windows,Linux和MacOS)生成3个二进制文件?
解决方法
您可以只设置多个目标,然后运行assemble
任务将为主机上所有可用的二进制文件生成二进制文件。这很重要,因为除了在macOS主机上之外,无法在任何地方为macOS创建二进制文件,Windows目标也有一些复杂的准备工作(请参见this issue)。另外,源集可能存在一些问题-如果它们的内容相同,则可能值得将它们连接起来,如下例所示:
kotlin {
macosX64("nativeMac")
linuxX64("nativeLin")
mingwX64("nativeWin")
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
binaries {
executable {
entryPoint = "main"
}
}
}
sourceSets {
val nativeMacMain by getting //let's assume that you work on Mac and so put all the code here
val nativeLinMain by getting {
dependsOn(nativeMacMain)
}
}
}