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

Nik*_*nov 2 xcode clang

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

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

Car*_*rum 5

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

#include "generatedFile1.c"
#include "genreatedFile2.c"
Run Code Online (Sandbox Code Playgroud)

等等。然后,您只需要让这个文件(或构建阶段)依赖(或运行)源代码生成步骤。

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

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

主.m:

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

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

    @autoreleasepool {

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

    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

脚本.sh:

#!/bin/sh

echo "NSString *string = @\"Hello, World\";" > ${SYMROOT}/generatedFile.m
Run Code Online (Sandbox Code Playgroud)

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