Xcode 如何编译和链接其他源代码而不将其显式包含到项目中?

Xcode 如何编译和链接其他源代码而不将其显式包含到项目中?,xcode,clang,Xcode,Clang,我有一个工具,可以在运行脚本部分的构建阶段生成额外的源代码。我想将本节的结果文件包括在编译和链接中。怎么可能呢?我知道可以在额外的运行脚本部分编写clang调用,但我正在寻找其他选项,因为它太复杂,无法使运行脚本部分与clang和项目编译器设置保持同步 我正在生成的文件是当前包含在项目中的类的一组类别。我不需要担心将类别导入到项目中,因为自动生成的所有代码都会导入到生成的categories.h中,默认情况下,生成的categories.h会导入到预编译头中。您可以通过向项目中添加包含以下内容的

我有一个工具,可以在运行脚本部分的构建阶段生成额外的源代码。我想将本节的结果文件包括在编译和链接中。怎么可能呢?我知道可以在额外的运行脚本部分编写clang调用,但我正在寻找其他选项,因为它太复杂,无法使运行脚本部分与clang和项目编译器设置保持同步


我正在生成的文件是当前包含在项目中的类的一组类别。我不需要担心将类别导入到项目中,因为自动生成的所有代码都会导入到生成的categories.h中,默认情况下,生成的categories.h会导入到预编译头中。

您可以通过向项目中添加包含以下内容的文件来解决此问题:

#include "generatedFile1.c"
#include "genreatedFile2.c"
等等。然后,您只需要使该文件(或构建阶段)依赖于(或在)源代码生成步骤之后运行

我对Xcode不是很熟悉,所以我不知道您具体是如何做到这一点的;希望有更具经验的人能在这方面为你指明正确的方向

编辑:我在这里做了一个简单的项目。例如:

main.m:

#import <Foundation/Foundation.h>
#import "generatedFile.m"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"%@", string);

    }
    return 0;
}

然后我在项目设置的“标题搜索路径”中添加了
${SYMROOT}
,并在“编译源代码”阶段之前添加了一个“运行shell脚本”阶段。

在Xcode中,从脚本向编译阶段添加文件实际上是一个挑战。:)所以第二部分是最重要的。无论如何,谢谢你的帮助:)我现在正在摆弄它。添加脚本阶段似乎非常简单,我想我只需要弄清楚如何将构建结果目录添加到include搜索路径。编辑:我通过在
/tmp
中生成文件使它工作,所以我离它不远了。你知道吗,它实际上可能是一个选项。谢谢你的建议。我会调查一下的。我会让你知道,如果它会为我工作。谢谢对我来说也很好用。非常感谢:)
#!/bin/sh

echo "NSString *string = @\"Hello, World\";" > ${SYMROOT}/generatedFile.m