Как скомпилировать и связать дополнительный исходный код, не включая его явно в проект?

У меня есть инструмент, который генерирует дополнительный исходный код на этапе сборки в разделе сценария запуска. Я хотел бы включить полученные файлы этого раздела в компиляцию и компоновку. Как это можно сделать? Я знаю, что можно написать вызовы clang в дополнительном разделе сценария запуска, но я ищу альтернативные варианты, поскольку будет слишком сложно поддерживать синхронизацию раздела сценария запуска с параметрами clang и компилятора проекта.

Файлы, которые я генерирую, представляют собой набор категорий для классов, которые в настоящее время включены в проект. Мне не нужно беспокоиться об импорте категорий в проект, поскольку весь код, который сгенерирован, автоматически импортируется в generate-Categories.h, который по умолчанию импортируется в предварительно скомпилированный заголовок.

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} в "Пути поиска по заголовкам" в настройках проекта и добавили фазу "Выполнить сценарий оболочки" перед фазой "Исходники компиляции".

Другие вопросы по тегам