从OS X命令行编译Swift:
swift -sdk $(xcrun --show-sdk-path --sdk macosx) test.swift
从命令行编译目标C:
clang -lobjc -framework Foundation -c testObject.m
我可以将-c选项添加到任一编译器以生成.o文件。
如何将这两个源文件链接到一个应用程序中?
还是需要建造更多?
TL; DR :最好使用Xcode工具,因为有很多事情要进行。但是也可以只使用命令行工具。
我会警告您,这是一个如何编译和运行与Cocoa和Swift运行时链接的.m和.swift文件的快速而肮脏的示例。我什至没有尝试遵循双方的最佳做法。
.m
.swift
假设您有一个Objective-C类:
$ cat C.h #import <Cocoa/Cocoa.h> @interface C : NSObject @property (retain) NSString *c; @end $ cat C.m #import "C.h" @implementation C - (id)init { self = [super init]; self.c = @"Hello world!"; return self; } @end
您有一个使用该类的Swift文件:
$ cat S.swift let c = C() println(c.c)
您只需要将Objective-C和Swift文件.o分别编译为文件:
.o
xcrun clang C.m -o C.o -c # Be sure to import the bridge header (our only header in this example) xcrun swiftc -c S.swift -import-objc-header C.h -F /System/Library/Frameworks -I/usr/include
如您所见,我们必须手动包含框架和标头路径,以使Swift编译器找到正确的文件(最好是在SDK中而不是当前安装的文件btw中查找它们)xcrun --show-sdk-path))。
xcrun --show-sdk-path
然后,我们只需要链接它们,即可拉出所有Swift和Objective-C运行时库。由于swift默认情况下提取了Objective- C库,因此我们甚至不需要指定太多:
swift
xcrun swiftc -o app C.o S.o
看,我们的可执行文件已链接,我们可以运行它!
$ ./app Hello world!
这都是非常有趣的,但是我建议不要直接使用这些工具,除非您实际上是为您的项目构建针对它们的项目构建系统,并且有充分的理由不使用Xcode / xcodebuild。
xcodebuild