我的做法:
我有一个脚本,它
- 读取一些配置文件以生成源代码片段
- 查找相关的Objective-C源文件并
- 用步骤1中生成的代码替换源代码的一些部分。
还有一个Makefile,它有一个特殊的时间戳文件作为make目标和配置文件作为目标源:
SRC = $(shell find ../config -iname "*.txt")
STAMP = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME).stamp
$(STAMP): $(SRC)
python inject.py
touch $(STAMP)
我将这个 Makefile 添加为项目目标构建阶段的顶部的“运行脚本构建阶段”。
发生了什么:
在编译源代码之前,脚本构建阶段被执行。
然而,由于脚本在执行期间修改了源代码,因此我需要构建两次以获取最新版本的构建产品。这是我想象中正在发生的事情:
- 第一次运行:Xcode 收集依赖信息 ---> 没有更改
- 第一次运行:Xcode 运行“运行脚本构建阶段”---> 在 Xcode 的背后更改源文件
- 第一次运行:Xcode 完成构建,认为不需要更新任何东西
- 第二次运行:Xcode 收集依赖信息--->源已更改,需要重新构建!
- 第二次运行:Xcode 运行“运行脚本构建阶段”---> 一切都是最新的
- 第二次运行:Xcode 继续编译
在阅读关于构建阶段的 Xcode 文档之后,我尝试将一个已知每次运行脚本时都会更新的源文件添加为“运行脚本构建阶段”的输出,但没有任何更改。由于项目中可能会有不同数量的配置文件,我不想指定每个输入和输出文件。
问题:
如何让 Xcode 意识到“运行脚本构建阶段”期间对源文件所做的更改?
编辑:
- 添加了我将脚本构建阶段放在其他构建阶段之前的信息。