如何编译和链接其他源代码而不将其明确包含在项目中?

时间:2013-07-27 04:32:30

标签: xcode clang

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

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

1 个答案:

答案 0 :(得分:4)

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

#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;
}

script.sh:

#!/bin/sh

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

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