#kotlin #cross-compiling #kotlin-native
#kotlin #кросс-компиляция #kotlin-native
Вопрос:
Стандартная конфигурация Kotlin native project 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
}
}
Такая конфигурация может создавать двоичные файлы только для одной цели. Как можно настроить конфигурацию так, чтобы одна сборка создавала 3 двоичных файла для всех упомянутых целей: Windows, Linux и macOS?
Ответ №1:
Вы можете просто задать несколько целей, а затем выполнить assemble
задачу, чтобы создать двоичные файлы для всех доступных на вашем хост-компьютере. Это важно, поскольку двоичный файл для macOS нельзя создать нигде, кроме как на хосте macOS, Windows target также имеет некоторые сложные приготовления (см. Этот выпуск ). Кроме того, могут возникнуть некоторые проблемы с исходными наборами — если их содержимое идентично, возможно, стоит подключить их, как в примере ниже:
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)
}
}
}