У меня есть несколько проектов, которые имеют общие классы, и поэтому я собираюсь изменить проект
макет, чтобы отразить эти зависимости, разделив его на компоненты, которые реализованы в виде статических библиотек.
На данный момент я создал один модуль ‘io’, который использует блок экспорта для экспорта своего пути включения. Модуль зависит от «ядра». «Ядро» само по себе зависит от «приложения», пока ничего особенного.
Документация об элементе экспорта говорит, что его свойства транзитивны, но я получаю несколько ошибок
из компилятора при компиляции приложения, которое включает в себя ядро не может быть найден. Глядя на
В операторе компилятора путь включения, экспортируемый io, не указан в путях включения.
При добавлении зависимостей к io в приложении напрямую все работает нормально.
Я неправильно использую пары Export / Depends или мой общий макет плохой.
Я изменил пример Qbs app-and-lib, чтобы отразить мой макет для пояснения.
app
|- main.cpp
lib1
|- lib.cpp
lib2
|- lib.cpp
|- Test.h=== app-and-lib.qbs
import qbs 1.0
Project {
references: [
"app/app.qbs",
"lib1/lib1.qbs",
"lib2/lib2.qbs"]
}
=== app.qbs
import qbs 1.0
Product {
type: "application"name : "app-and-lib-app"files : [ "main.cpp" ]
Depends { name: "cpp" }
Depends { name: "lib1" }
}
=== lib1.qbs
import qbs 1.0
Product {
type: "staticlibrary"name: "lib1"files: [ "lib.cpp" ]
cpp.defines: ['CRUCIAL_DEFINE']
Depends { name: 'cpp' }
Depends { name: "lib2" }
}
=== lib2.qbs
import qbs 1.0
Product {
type: "staticlibrary"name: "lib2"files: [
"Test.h",
"lib.cpp",
]
cpp.defines: ['CRUCIAL_DEFINE']
Depends { name: 'cpp' }
Export {
Depends { name: "cpp" }
cpp.includePaths: "."}
}
=== lib.cpp
#include <stdio.h>
#include "Test.h"
#ifndef CRUCIAL_DEFINE
# error CRUCIAL_DEFINE not defined
#endif
int bla()
{
puts("Hello World!");
return 2;
}
=== main.cpp
#include <stdio.h>
#include "Test.h" // Error cannot found Test.h
int bla();
int main()
{
Test t = new Test();
return bla();
}
Прошел через IRC к Qbs Jira и получил ответ от разработчиков, что это ошибка в документации.
Чтобы экспортировать зависимости, нужно экспортировать их, поэтому lib1.qbs нужно расширить следующим образом
Exports {
Depends { name: "lib2" }
}
Следовать за: https://bugreports.qt.io/browse/QBS-928
Других решений пока нет …