gpt4 book ai didi

在单次构建运行中针对多个目标的 Kotlin 交叉编译

转载 作者:行者123 更新时间:2023-12-02 13:39:52 24 4
gpt4 key购买 nike

默认的 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
}
}

这样的配置只能为单个目标生成二进制文件。如何调整配置,以便单个构建将为所有提到的目标生成 3 个二进制文件:Windows、Linux 和 MacOS?

最佳答案

您可以只设置一些目标,然后运行 ​​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)
}
}
}

关于在单次构建运行中针对多个目标的 Kotlin 交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64580451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com