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