gpt4 book ai didi

swift - 如何将已编译的 .swift 模块中声明的 swift 函数导入另一个 swift 文件?

转载 作者:IT王子 更新时间:2023-10-29 05:15:58 34 4
gpt4 key购买 nike

有没有办法在 .swift 文件(编译成 .swift 模块)中声明函数,如下所示:

你好.swift

func hello_world() {
println("hello world")
}

主.swift

import hello

hello.hello_world()

我还做了 a git repo with these two files and a Makefile with the compile / link commands ready to go .目前我可以让 main.swift 导入你好,但它目前无法链接......我可以通过另一个链接器标志吗?目前 Makefile 是:

PWD=$(shell pwd)
APP_NAME=main
MODULE_NAME=hello
SWIFT_MODULE_PATH=$(PWD)/$(MODULE_NAME).swiftmodule
SDK=/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk


main : clean
xcrun swift $(MODULE_NAME).swift -emit-module -v
xcrun swift $(APP_NAME).swift \
-o $(APP_NAME) \
-sdk $(SDK) \
-I $(PWD) \
-Xlinker -sectalign \
-Xlinker __SWIFT \
-Xlinker __ast \
-Xlinker 4 \
-Xlinker -sectcreate \
-Xlinker __SWIFT \
-Xlinker __ast \
-Xlinker $(SWIFT_MODULE_PATH) \
-v

最佳答案

.swiftmodule 描述了 Swift 模块的接口(interface),但它不包含模块的实现。仍然需要一个库或一组目标文件来链接您的应用程序。这是 makefile 的修改版本,它同时创建 libhello.dylib 和 hello.swiftmodule 并针对它们构建应用程序:

PWD=$(shell pwd)
APP_NAME=main
MODULE_NAME=hello
LIB_NAME=lib$(MODULE_NAME).dylib
LIB_PATH=$(PWD)/$(LIB_NAME)
SWIFT_MODULE_PATH=$(PWD)/$(MODULE_NAME).swiftmodule

main : clean
xcrun swift \
-emit-library \
-o $(LIB_PATH) \
-Xlinker -install_name \
-Xlinker @rpath/$(LIB_NAME) \
-emit-module \
-emit-module-path $(SWIFT_MODULE_PATH) \
-module-name $(MODULE_NAME) \
-module-link-name $(MODULE_NAME) \
-v \
$(MODULE_NAME).swift
xcrun swift $(APP_NAME).swift \
-o $(APP_NAME) \
-I $(PWD) \
-L $(PWD) \
-Xlinker -rpath \
-Xlinker @executable_path/ \
-v


clean :
rm -rf $(APP_NAME) $(LIB_NAME) $(MODULE_NAME).swiftmodule $(MODULE_NAME).swiftdoc

在没有文档的情况下,我不能说这是完全正确的,但它确实有效。

请注意,如果您只想在您的应用程序模块中使用多个源文件,这将更加直接,并且不需要在 main.swift 中声明 import 或模块限定:

swift -o main hello.swift main.swift

关于swift - 如何将已编译的 .swift 模块中声明的 swift 函数导入另一个 swift 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296470/

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