I'm writing a Kotlin/Native application targeted for Windows, Linux and Mac and I need to call platform.posix._popen
on Windows and platform.posix.popen
on the other.
If I use a simple conditional (if (Platform.osFamily == OsFamily.WINDOWS)
), I get a compile error.
There is no such thing as #ifdef
in Kotlin, but you can use the expect
/actual
mechanism to achieve what you need.
In common code, define an expect fun
without a body, and then define an actual fun
implementation separately in linux/windows/macOS source sets.
You can find more details about how to do this in the Kotlin multiplatform documentation.