2013-06-18 2 views
4

Я хочу использовать Qbs для компиляции существующего проекта. Этот проект уже содержит инструмент преобразования кода (my_tool), который сильно используется в этом проекте.Как может построить правило Qbs использовать продукт

До сих пор я (упрощенно):

import qbs 1.0 

Project { 
    Application { 
     name: "my_tool" 
     files: "my_tool/main.cpp" 
     Depends { name: "cpp" } 
    } 

    Application { 
     name: "my_app" 
     Group { 
      files: 'main.cpp.in' 
      fileTags: ['cpp_in'] 
     } 
     Depends { name: "cpp" } 

     Rule { 
      inputs: ["cpp_in"] 
      Artifact { 
       fileName: input.baseName 
       fileTags: "cpp" 
      } 
      prepare: { 

       var mytool = /* Reference to my_tool */; 

       var cmd = new Command(mytool, input.fileName, output.fileName); 
       cmd.description = "Generate\t" + input.baseName; 
       cmd.highlight = "codegen"; 
       return cmd; 
      } 
     } 
    } 
} 

Как я могу получить ссылку на my_tool для команды?

+0

Ther no tag 'qbs' еще ... –

ответ

7

Этот ответ основан на электронном письме от автора Qbs Йорга Борнемана, который позволил мне привести его здесь.

Свойство usings правила позволяет добавлять артефакты из зависимостей продуктов от входных данных. В этом случае нас интересуют «прикладные» артефакты.

После этого список приложений можно будет получить как input.application.

Application { 
    name: "my_app" 
    Group { 
     files: 'main.cpp.in' 
     fileTags: ['cpp_in'] 
    } 
    Depends { name: "cpp" } 

    // we need this dependency to make sure that my_tool exists before building my_app 
    Depends { name: "my_tool" } 

    Rule { 
     inputs: ["cpp_in"] 
     usings: ["application"] // dependent "application" products appear in inputs 
     Artifact { 
      fileName: input.completeBaseName 
      fileTags: "cpp" 
     } 
     prepare: { 
      // inputs["application"] is a list of "application" products 
      var mytool = inputs["application"][0].fileName; 
      var cmd = new Command(mytool, [inputs["cpp_in"][0].fileName, output.fileName]); 
      cmd.description = "Generate\t" + input.baseName; 
      cmd.highlight = "codegen"; 
      return cmd; 
     } 
    } 
} 
0

usings К сожалению, недвижимость в Rule является устаревшим, так как QBS 1.5.0. На данный момент у меня такое же требование. Использование артефакта продукта в не мультиплекс Rule.

Проблема с мультиплексором Rule заключается в том, что если один файл в наборе ввода изменяется, все входные артефакты будут переработаны. Это довольно много времени в моем случае.

Смежные вопросы