【问题标题】:How to compile and link additional source code without including it explicitly into the project?如何编译和链接其他源代码而不将其显式包含到项目中?
【发布时间】:2013-07-27 04:32:29
【问题描述】:

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

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

【问题讨论】:

    标签: xcode clang


    【解决方案1】:

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

    #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脚本”阶段。

    【讨论】:

    • 这实际上是 Xcode 中的一个挑战,即从脚本将文件添加到编译阶段。 :) 所以第二部分是最重要的。无论如何感谢您的帮助:)
    • 我现在正在摆弄它。添加脚本阶段似乎很容易,我认为我只需要弄清楚如何将构建结果目录添加到包含搜索路径。编辑:我通过在/tmp 中生成文件来让它工作,所以我离得不远了。
    • 你知道吗,这实际上是一种选择。谢谢你的想法。我会调查一下。如果它对我有用,我稍后会告诉你。谢谢!
    • 它在我这边也很完美。非常感谢:)
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-06-03
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多