【发布时间】:2010-11-01 20:45:23
【问题描述】:
我做了什么:
我有一个脚本
- 读取一些配置文件生成源代码sn-ps
- 查找相关的 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 运行 Run Script Build Phase" ---> 一切都是最新的
- 第二次运行:Xcode 继续编译
在阅读Xcode documentation on Build Phases 之后,我尝试添加一个源文件,该源文件在每次运行脚本时都会被更新为“运行脚本构建阶段”的输出,但没有任何改变。由于我的项目中配置文件的数量可能会有所不同,因此我不想指定每个输入和输出文件。
问题:
如何让 Xcode 了解在“运行脚本构建阶段”期间所做的源文件更改?
编辑:
- 补充说我将脚本构建阶段放在其他构建阶段之前
【问题讨论】:
-
后续问题:是否可以只为编译器重写代码而不更新实际文件?
标签: xcode scripting build dependencies