共通のクラスを共有するいくつかのプロジェクトがあるため、静的ライブラリとして実装されるコンポーネントに分割することで、これらの依存関係を反映するようにプロジェクトのレイアウトを変更しようとしています。
今のところ、Export ブロックを使用してそのインクルード パスをエクスポートする 1 つのモジュール 'io' を作成しました。モジュールは「コア」によって依存されています。「コア」自体は「アプリ」によって依存されますが、これまでのところ特別なことは何もありません。
Export アイテムのドキュメントには、そのプロパティは推移的であると書かれていますが、コアからインクルードするアプリをコンパイルすると、コンパイラからいくつかのエラーが発生します。コンパイラ ステートメントを見ると、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();
}