如何在命令行编译的Swift应用程序中使用文件夹?

问题描述:

我正在使用Swift3和Swift包管理器构建一个简单的网络服务器。在项目文件夹中运行swift build将构建Sources目录中的所有源并输出可执行文件。但是,我发现如果我在Sources目录中创建文件夹来组织我的代码,我的构建失败。它看起来像文件夹的存在导致迅速将源视为不同的模块。这是原因吗?如果是这样,我该如何解决它?如何在命令行编译的Swift应用程序中使用文件夹?

是的。直接在Sources下放置目录将导致SwiftPM将它们解释为模块。这在package manager reference中描述。

要解决此问题,使用间​​接的另一个层面:把一个目录,在模块内部Sources和你的这个目录中的其他目录:

Sources/YourApp/Stuff/Source1.swift 
Sources/YourApp/Stuff/Source2.swift 
Sources/YourApp/MoreStuff/Source3.swift 
Sources/YourApp/MoreStuff/Source4.swift 
+0

好走!虽然我不得不说,我不知道为什么将此设为默认行为的理由是什么?至少可以说,这绝对不是直觉。 –