Russian Qt Forum
Ноябрь 23, 2024, 11:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] qbs, группы файлов и префиксы  (Прочитано 4081 раз)
SLiDER
Гость
« : Декабрь 22, 2014, 15:12 »

Вопрос вот собственно в чём. Необходимо собирать проект с использованием protobuf. Есть протофайлы разбитые по функционалу на несколько поддиректорий. По логике предлагаемой разработчиками qbs необходимо создать несколько групп (Group) с одинаковыми тэгами (fileTags) и соответствующими префиксами (prefix). Например так:
Код:
    
    Group {
        name: "MainProtoFiles"
        files: "*.proto"
        fileTags: ["proto"]
    }

    Group {
        name: "ModulesProtoFiles"
        prefix: "modules/"
        files: "*.proto"
        fileTags: ["proto"]
    }

А затем подключить их  к правилу (Rule) через поле ввода (inputs). Например так:
Код:
 Rule {
        id: protoCompiler
        inputs: ["proto"]
        ...
}

Так вот, далее при написании правила для обработки этих самих inputs мне необходимо знать тот самый prefix для того чтобы копировать результаты работы protoc (протокомпилятора) в соответствующие поддиректории. Есть ли хоть какой-нить штатный метод до него добраться? И если нет, то какие у кого есть предложения, что с этим можно сделать?
« Последнее редактирование: Декабрь 22, 2014, 18:16 от SLiDER » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Декабрь 22, 2014, 16:13 »

Эмм.. так inputs и так будет содержать полные имена/пути файлов.. Те, которые в MainProtoFiles не будут начинаться с "modules/", а те, которые в ModulesProtoFiles будут начинаться (или содержать) "modules/". Поэтому можно просто искать соответствия "modules/" в именах файлов и копировать эти файлы куда надо.

ЗЫ: Можно для  ModulesProtoFiles создать свой тег, например:

Код:
    Group {
        name: "ModulesProtoFiles"
        prefix: "modules/"
        files: "*.proto"
        fileTags: ["proto_modules"]
    }

и тогда в Rule:

Код:
Rule {
        id: protoCompiler
        inputs: ["proto", "proto_modules"]
        ...

       var f = inputs.proto[i].filePath; // main файлы
       var f = inputs.proto_modules[i].filePath; // модули
}

или как-то так.
« Последнее редактирование: Декабрь 22, 2014, 16:17 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
SLiDER
Гость
« Ответ #2 : Декабрь 22, 2014, 16:25 »

Это понятно что пути к протофайлам будут сформированы корректно. Но мне то нужно сформировать пути файлам которые сгенерирует протокомпилятор, а для этого мне нужно знать тот самый префикс, т.к. на вход правила они будут валится все скопом с абсолютными путями, а результаты работы протокомпилятора мне нужно распихать по поддиректориям.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Декабрь 22, 2014, 16:44 »

тогда - никак. только распихивать в отдельные продукты. имхо.
Записан

ArchLinux x86_64 / Win10 64 bit
SLiDER
Гость
« Ответ #4 : Декабрь 22, 2014, 18:01 »

Это тоже не вариант, либа нужна одна, тем  более что там про протофайлам перекрёстные зависимости есть. Есть кривой вариант делать группы с разными тэгами, а потом в правиле разбирать тэги и в соответствии с ними формировать пути к генерируемым файлам. Но это же полный бред. Как интересно работает с этим компиляция плюсов. Пойду исходники почитаю.
Записан
SLiDER
Гость
« Ответ #5 : Декабрь 22, 2014, 18:16 »

Всё. Проблема решена. Есть волшебное поле baseDir которое содержит в себе как раз то что нужно Улыбающийся Оно есть и в inputs (для мультиплексного правила) и в input для обычного.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 22.