我正在尝试设置Xcode来构建生成的。c文件,就像它为yacc (*.y
)和lex (*.l
)文件生成的文件一样。
假设我有一个扩展名为*.corn
的输入文件,该文件将由我的工具处理以创建C源文件。然后,我希望使用Xcode的其余机制编译和链接这些C源文件。
这正是发生在我的yacc
和lex
的.y
和.l
文件。项目目标只包含.y
和.l
文件,其余的会自动发生。生成的.c
文件放在派生文件目录中,并自动编译和链接。
以下是我到目前为止所做的尝试:
-如果我只是添加一个.corn
文件到我的目标,Xcode复制到包在构建时假定它是一个资源。好的,无论.
-I然后创建一个自定义构建规则来处理
文件名匹配的源文件:* .corn
使用定制脚本:
#!/bin/sh
cp "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.c"
我必须给它一个输出文件,所以:
OutputFiles:$ {DERIVED_FILES_DIR}/$ {INPUT_FILE_BASE} . c
注意,在这种情况下,我只是复制文件,因为我用。c扩展名重命名它。(当我在玩的时候,.corn文件只包含C源代码。)
那么现在在bundle目录创建之前,我得到了以下警告:
unexpected C compiler invocation with specified outputs: 'blahblahblah/Build/Products/Debug-iphonesimulator/MyApp.app/foo.c' (for input: 'blahblahblah/Build/Intermediates.noindex/MyApp.build/Debug-iphonesimulator/MyApp.build/DerivedSources/foo.c')
然后在链接阶段之后的,运行上面的脚本,并且在DERIVED_FILES_DIR中得到foo.c。但是它不会被编译,值得注意的是。玉米不再被复制到包中,所以还有希望。
我已经尝试了很多其他的东西,但这是我能描述的最干净的其他人可以尝试。请问是什么魔法咒语使它工作?!
请注意,我也尝试过使用DERIVED_SOURCES_DIR而不是DERIVED_FILES_DIR。
我错过了两件事:
- 我需要将.corn文件添加到"编译源代码"构建阶段。 通过在添加自定义构建规则之前将。corn文件添加到项目/目标中,Xcode将。corn文件添加到"拷贝Bundle资源"中。