Russian Qt Forum
Апрель 27, 2017, 02:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] qbs и правила (Rule)  (Прочитано 1241 раз)
SLiDER
Программист
*****
Offline Offline

Сообщений: 537


Просмотр профиля
« : Декабрь 25, 2014, 16:05 »

В попытке написать правило создающее заголовочники-заглушки (а-ля Qt) столкнулся с тем фактом, что qbs отказывается выполнять правила выход которых никто не использует. Я конечно понимаю, оптимизация и всё такое, но ... Может кто-нить знает нормальный способ заставить его выполнять правило выход которого не заведён ни на чей вход? Возможен костыль. Если прописать в тэги выходных артефактов тип продукта, для приложения это "application", для статической библиотеки  "staticlibrary" и т.п. Но это весьма не удобный костыль, особенно если выносить данную функциональность в отдельный модуль.
« Последнее редактирование: Декабрь 25, 2014, 16:28 от SLiDER » Записан

Пусть это будет просто: просто, как только можно, но не проще.  (Альберт Эйнштейн)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2514


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

Ничего не понял. Что нужно то?

Если Rule совсем кастомное (совсем кастомные теги, которых не знает ядро qbs) и это Rule завернуто в модуль. То чтобы оно выполнялось нужно добавить additionalProductTypes в модуль. И в своем проекте использовать этот тип.

модуль MyCoolModule:
Код:
Module {
    additionalProductTypes: ["my_cool_type"]

    FileTagger {
        patterns: [ "*.mycoolextension" ]
        fileTags: [ "my_cool_in" ]
    }
    
    Rule {
        inputs: [ "my_cool_in" ]
        Artifact {
            filePath: product.destinationDirectory + "/" + FileInfo.fileName(input.filePath)
            fileTags: [ "my_cool_type" ]
        }
        prepare: {
            ...
        }
    }
}

продукт MyCoolProduct:
Код:
Product {
    name: "MyCoolProduct"
    type: [ "my_cool_type" ]

    Depends { name: "MyCoolModule" }
    ...
}
Записан

ArchLinux x86_64 / Win10 64 bit
SLiDER
Программист
*****
Offline Offline

Сообщений: 537


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

Вы читаете мои мысли Улыбающийся Всё так. И всё работает. Спасибо.
Записан

Пусть это будет просто: просто, как только можно, но не проще.  (Альберт Эйнштейн)
VVN
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #3 : Февраль 24, 2017, 01:43 »

Подниму тему уж очень созвучна с тем что мне нужно.

Как запустить Rule без выноса ее в отдельный модуль.

Есть Product в котором компилируем кучку фалов и получаем столько же объектников.
Тут все ок.
Но затем мне нужно взять бинарник сделать из него объектник и скормить его (+ скомпилированные
файлы ) линкеру.

Вот тут затыка причем со странными глюками.

1) Rule само по себе не хочет работать нужен вход и выход, как говорили, если выхода нет, то и правило не сработает.
2) Если я его запускаю (пока просто копирую файл) то проект не хочет прособираться (директорию не может очистить)
причем иногда линкер не находит некотрые файлы. Они просто не скомпилировались.

Убираю это правило все Ок.

Вообще есть ли годное описание qbs?
Тяжело понять как это все работает.
 
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2514


Просмотр профиля
« Ответ #4 : Февраль 24, 2017, 11:06 »

Цитировать
Вообще есть ли годное описание qbs?

1. Скачайте сорцы QBS и смотрите в их папочках examples и tests.
2. Скачайте сорцы QtCreator и смотрите как QBS там используется (мне оч. помогло).
3. Поднимите архив списка рассылки и может там что найдется годное.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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