有没有一种方法可以在.swift文件(已编译为.swiftmodule)中声明函数,如下所示:
你好迅捷
func hello_world() { println("hello world") }
主Swift
import hello hello.hello_world()
我还用这两个文件制作了一个git repo,并准备好了带有compile / link命令的Makefile。目前,我可以获取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模块的接口,但其中不包含模块的实现。仍需要一个库或一组目标文件来链接您的应用程序。这是makefile的修改版本,可同时创建libhello.dylib和hello.swiftmodule并针对它们构建应用程序:
.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
在没有文档的情况下,我不能说这是完全正确的,但是可以。
请注意,如果您只是想在您的应用程序模块中使用多个源文件,则这要简单得多,并且不需要import在main.swift中声明或进行模块限定:
import
swift -o main hello.swift main.swift