Kotlin/Native cinterop:.def 文件中的 compilerOpts 与 compilerOpts 中的 gradle

Kotlin/Native cinterop: compilerOpts inside .def file vs compilerOpts inside gradle

cinterop for Kotlin/Native 的文档中,您必须定义一个 .def 文件,例如:

language = Objective-C
modules = FirebaseCore
compilerOpts = -framework FirebaseCore
linkerOpts = -framework FirebaseCore

现在您还可以在 cinterop 块中指定一个 compilerOpts,例如:

compilations["main"].cinterops {
    firebasecore {
        packageName 'cocoapods.FirebaseCore'
        defFile = file("$projectDir/src/iosMain/c_interop/FirebaseCore.def")
        includeDirs ("$projectDir/../iosApp/Pods/FirebaseCore/Firebase/Core/Public")
        compilerOpts ("-F$projectDir/src/iosMain/c_interop/modules/FirebaseCore-${versions.firebaseCoreIos}")
    }
}

我这里只用了 Kevin Galligan 的这个例子:KMPFirestore

我真的很困惑 gradle 中的 compilerOpts.def 文件中的 compilerOpts 之间的区别是什么?

我没有很强的 C 背景,我只是想学习 Kotlin Multiplatform(目前只是想了解如何与 C 或 ObjectiveC 库互操作),但我无法正确设置它们.

非常感谢您的帮助,因为我什至不完全理解 .def 文件的工作原理。

任何与理解这些东西相关的阅读 material 都会有很大帮助。

据我所知,两个 compilerOpt 将在生成互操作时合并。遗憾的是 linkerOpts 不能这样工作。但是为了让互操作正常工作 link,我必须在 .def 文件中也为 linkerOpts 指定框架的绝对路径。