0

共通のクラスを共有するいくつかのプロジェクトがあるため、静的ライブラリとして実装されるコンポーネントに分割することで、これらの依存関係を反映するようにプロジェクトのレイアウトを変更しようとしています。

今のところ、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();
}
4

1 に答える 1

0

IRC を介して Qbs Jira にアクセスし、開発者からドキュメントのエラーであるという回答を得ました。依存関係をエクスポートするには、それをエクスポートする必要があるため、lib1.qbs を次のように拡張する必要があります

Exports { 
  Depends { name: "lib2" }
}

フォローアップ: https://bugreports.qt.io/browse/QBS-928

于 2016-02-03T19:59:47.257 に答える