【发布时间】:2011-02-21 13:55:58
【问题描述】:
在 Xcode 中,有没有办法指定文件夹中的所有文件都由目标编译。例如。 “Test”目标自动编译“Tests”文件夹中的所有文件,而“App”目标编译“Sources”文件夹中的所有文件。
今天,我这样做的方式是在每次创建文件时将文件添加到目标。这感觉有点容易出错和多余,因为文件已经组织在正确的文件夹中。
谢谢。
【问题讨论】:
标签: xcode build build-process build-automation
在 Xcode 中,有没有办法指定文件夹中的所有文件都由目标编译。例如。 “Test”目标自动编译“Tests”文件夹中的所有文件,而“App”目标编译“Sources”文件夹中的所有文件。
今天,我这样做的方式是在每次创建文件时将文件添加到目标。这感觉有点容易出错和多余,因为文件已经组织在正确的文件夹中。
谢谢。
【问题讨论】:
标签: xcode build build-process build-automation
这在 Xcode 中完全被破坏了。通过文件夹引用添加文件夹(@Pavel 的回答)应该是正确的 - 但它只是不起作用。另见https://stackoverflow.com/a/42600782/2518722。我正在使用 Xcode 8.3(更新:在 Xcode 11 中仍然被破坏),但它之前也被破坏了很多代。
没有完美的解决方法,但我就是这样做的:
现在对共享目录中文件的任何更改都会反映在 Xcode 中,这很好。
但是,没有办法刷新组。 (如果我在这里遗漏了一些明显的东西,请告诉我。)因此,如果您已将新文件添加到目录中,则必须在 Xcode 中删除该组并在这些文件出现之前重新添加它。这显然很不方便,但至少不太容易出现用户错误 - 并且比手动逐个添加文件要好。
不得不说,开发环境的一个如此简单而必要的功能在这里被破坏了,这让我难以置信。
【讨论】:
当您将文件添加到 Xcode 项目时,您将在文件选择对话框中有两个选项可供选择:
您需要选择第二个选项。在这种情况下,Xcode 将始终反映对所选文件夹的文件和子文件夹的更改。
这个问题似乎是很久以前提出的,但它仍然在谷歌搜索中排名第一,所以希望它对某人有所帮助。
【讨论】:
您可以使用此功能将多个文件添加到目标。但它需要一些工作来过滤你想要的文件。
Project > Target > Compile Sources > cmd+A 选择所有文件 > 过滤 .m 文件 > 点击“添加”
与其他资源类似,
Project > Target > Copy Bundle Resources > 过滤 .png .wav .strings .xib .storyboard 等 > 点击“添加”
【讨论】:
以下是有关 stackoverflow 尝试处理此问题的其他一些问题:
Add files to an Xcode project from a script?
Automatically adding generated source files to an xcode project
【讨论】:
我只是按类型排序,所以我所有的源文件都是连续列出的。
然后我按住Shift+Cmd 并按向下箭头键选择我想要的所有文件。
一旦选择,我可以检查所有以添加到特定目标:)
【讨论】:
是的 - 只需选择文件夹中的所有文件并使用检查器窗口(目标选项卡)。
【讨论】:
您可以采取的一种方法是使用 CMake 为您生成 Xcode 目标。
详情:CMake - Automatically add all files in a folder to a target?
另一个可能的途径是配置自定义构建阶段。
【讨论】:
据我所知,Xcode 中没有关于此的错误,并且 Xcode从不支持这样的机制(根据文件系统中的可用性)。
Group 变体(groups-representing-a-folder vs. "regular" groups)仅允许您灵活地调整项目树的外观 - 如果它紧跟磁盘上的存储库,或者更加“人类可读”和描述性 - 无论源在存储库中的位置如何。
我说的是我使用过的所有 Xcode 版本 - 即 v1.0b2 到 v11.3
无论如何,我承认拥有这样的机制作为一项新功能会很好(我们可以为此向 Apple 承诺)。
现在的一种方法是构建一个小的新“编译器”,其输入是文件夹路径,其“生成的代码”将是该文件夹中的一组源文件。如果我们将这样一个“编译器”作为构建规则添加到我们的目标中——我们可能会达到预期的效果。
如果您想深入了解这一点,请遵循 Protobuf 可以添加到 Xcode 项目中的方式,以及如何在 Xcode 目标中处理 CoreML 模型。
【讨论】:
Xcode 可以使用 shell 脚本进行扩展。您可以将 shell 脚本设置为在构建时运行,这样您基本上可以让 xcode 做任何您想做的事情。你只受到你的 shell 脚本能力的限制,我相信你也能找到帮助。
【讨论】: