有没有办法在.
swift文件中声明一个函数(编译成.swiftmodule),就像这样:
hello.swift
- func hello_world() {
- println("hello world")
- }
main.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模块的接口,但它不包含模块的实现.仍然需要一个库或一组对象文件来链接您的应用程序.这是一个修改版本的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中不需要导入声明或模块限定:
- swift -o main hello.swift main.swift