QBSプロジェクトは静的ライブラリ、共有ライブラリなどのサブプロジェクトの集合です、およびQt GUIアプリケーションが含まれています。 Qt GUIアプリケーションでは、リンクステージが失敗し、プロジェクトチェーンの初期段階で構築されたライブラリの "/ usr/bin/ld:{library}:ファイルフォーマットが認識されません"というエラーがスローされるという問題がありました。ただし、このエラーをスローするライブラリとほぼ同じ.qbsファイルを持つライブラリを含め、すべてのライブラリでこれを行うわけではありません。アプリケーションがコレクションの一部としてビルドされていると、「/ usr/bin/ld:ライブラリが見つかりません:ファイル形式が認識されません」
奇妙なことに、自分でアプリケーションをビルドした場合、つまりトップレベルではなくアプリケーションのプロジェクトディレクトリからqbsを実行すると、それは正常に構築されます(依存ライブラリがインストールディレクトリ)。私が見る主な違いは、完全なプロジェクトをビルドすると、アプリケーションのcpp.libraryPathsはプロジェクト内のすべての製品で無視され、アプリケーションはビルドディレクトリで生成されたlibファイルとリンクしようとします。 cpp.libraryPathsは意図したとおりに使用されており、インストールディレクトリ内のファイルは正常にリンクされています。
ビルドディレクトリのファイルがエラーをスローする間に、インストールディレクトリのlibファイルをリンクすることができない理由はわかりません。最初にリンクが失敗する原因は何ですか?さらに、どのようにプロジェクトの構成を修正して、トップレベルでqbsを呼び出すことですべてを構築できるようにすることができます。おそらく私は間違ったやり方でこれについて行くだろうか?ここで
は、私がビルドを開始するために使用するコマンドです:
qbs qbs.installRoot:. release
そして問題の視覚的な表現:
Poject <-- calling qbs here throws errors at linking application
|- LibraryOne
|- LibraryTwo
|- Application <-- calling qbs here works if libraries already built
そして、ここではrelevent QBSの非常に単純化された再生が
をファイルです-- SubOne.qbs and SubTwo --
// These are identical excluding the files
StaticLibrary {
name: // "One" or "Two"
files: [/*Files...*/]
Depends {
name: "Qt"
submodules: [/*core, etc...*/]
}
Depends { name: "cpp" }
// cpp depends and properties
Group {
fileTagsFilter: product.type
qbs.installDir: "lib"
qbs.install: true
}
}
-- App.qbs --
QtGuiApplication {
name: "App"
files: [/*Files...*/]
Depends { name: "One" } // I comment out these depends when building the Application on it's own
Depends { name: "Two" }
Depends { name: "cpp" }
cpp.includePaths: ["../One/include","..Two/include"]
cpp.libraryPaths: ["../lib"] // <-- Ignored during full project build
cpp.staticLibraries: ["One","Two"]
Group {
fileTagsFilter: product.type
qbs.installDir: "bin"
qbs.install: true
}
}