Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: SLiDER от Декабрь 22, 2014, 15:12



Название: [РЕШЕНО] qbs, группы файлов и префиксы
Отправлено: 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 (протокомпилятора) в соответствующие поддиректории. Есть ли хоть какой-нить штатный метод до него добраться? И если нет, то какие у кого есть предложения, что с этим можно сделать?


Название: Re: qbs, группы файлов и префиксы
Отправлено: kuzulis от Декабрь 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; // модули
}

или как-то так.


Название: Re: qbs, группы файлов и префиксы
Отправлено: SLiDER от Декабрь 22, 2014, 16:25
Это понятно что пути к протофайлам будут сформированы корректно. Но мне то нужно сформировать пути файлам которые сгенерирует протокомпилятор, а для этого мне нужно знать тот самый префикс, т.к. на вход правила они будут валится все скопом с абсолютными путями, а результаты работы протокомпилятора мне нужно распихать по поддиректориям.


Название: Re: qbs, группы файлов и префиксы
Отправлено: kuzulis от Декабрь 22, 2014, 16:44
тогда - никак. только распихивать в отдельные продукты. имхо.


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


Название: Re: qbs, группы файлов и префиксы
Отправлено: SLiDER от Декабрь 22, 2014, 18:16
Всё. Проблема решена. Есть волшебное поле baseDir которое содержит в себе как раз то что нужно :) Оно есть и в inputs (для мультиплексного правила) и в input для обычного.