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 指定框架的绝对路径。
在 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 指定框架的绝对路径。