2016-07-12 17 views
2

私はいくつかのレベルを持つプロジェクトに取り組んでいます。個人的には、私はqbsを初めて勉強しており、qbsについての内部的な文書や例はあまりありません。ライブラリでQt qbsプロジェクト設定が見つかりませんコンパイルエラー

環境:

Qt5.6.1。 Qt作成者4.01; Ubuntu 16.04; Qbs 1.5.1

ここにプロジェクトの階層があります。トップレベルでは、それはproject.qbsました:

import qbs 
import qbs.File 
Project{ 
    var binaries = [ 
     "component1/component1.qbs", 
     "component2/component2.qbs", 
     "subpro/subpro.qbs",   // <- 1. the project I am working on 
     "ourlib/ourlib.qbs",   // <- 2. the library I am using 
    ] 
    return binaries 
} 

subpro.qbsのようなものです:

import qbs 
CppApplication{ 
    type: "application" 
    name: "myapp" 
    Group{ 
     name: "project-install" 
     fileTagsFilter: "application" 
     qbs.install: false 
     qbs.install: "bin" 
    } 
    Depends {name:"cpp"} 
    Depends {name:"blah1"} 
    Depends {name:"ourlib"} 

    cpp.libraryPaths:["path_of_lib3rdParty"] // 4. set the 3rd party lib path 
    cpp.staticLibraries:["lib3rdParty.a"] // 5. set the 3rd party lib name 

    files["myapp.cpp","f2"...] 
} 

import qbs 
Project { 
    name: subpro 
    references:[ 
     "app1/app1.qbs" 
     "app2/app2.qbs" 
     "myapp/myapp.qbs"   //<- 3. the application I am working on 
    ] 

}

myapp.qbsは次のようです

最終的に私たちのlibのqbs:

import qbs 
DynamicLibrary{ 
    name: "ourlib" 
    Group{ 
     name: "project-install" 
     fileTagsFilter: "dynamiclibrary" 
     qbs.install: false 
     qbs.installDir: "debug" 
    } 

    Depends {name: "cpp"} 
    cpp.includePath:["..."] 
    cpp.libraryPaths:["path_of_lib3rdParty"] // 6. same as 4 
    cpp.staticLibraries:["lib3rdParty.a"] // 7. same as 5 
} 

私は "qbs debug"をプロジェクトのルートフォルダの下で実行します。 QBSを示しています。

だから、
linking ourlib.so 
compiling myapp.cpp 
ERROR: ... 
/usr/bin/ld: cannot find -llib3rdParty_s.a 

、エラーメッセージに基づいて、QBSはmyapp.cppを構築するために失敗し、myappのプロジェクトでlib3rdPartyを見つけよう。私は4と5を追加しましたが、それでも同じエラーがあります。 ourlib.soとのリンクエラーがないので、6と7は正しいと思われます。構築プロセスを動作させるためにqbsをどのように設定する必要がありますか?

もう1つの質問はキーワード「レファレンス」についてです。プロジェクトのどのレベルでも他のqbsファイルを参照できますか?それがどのように働きますか?私は「依存する」についても同じ質問をしました。

答えて

3

おかげでcpp.dynamicLibrariescpp.staticLibrariesプロパティはlib接頭辞または接尾辞.soずにリンクするライブラリ、すなわち、ライブラリ名のリストを取ります。

たとえば、あなたが使用したい:

cpp.libraryPaths: ["/home/r0ng/tools/myapp/libs/relic/lib"] 
cpp.dynamicLibraries: ["relic"] 

をしかし、あなたはすでにあなたがリンクしたい動的ライブラリの完全なファイルパスを持っているので、あなたは、単に指定しなくても、完全なファイルパスを渡すことができますcpp.libraryPathsすべてで、そのような:それはむしろ、必ずしもあなたが期待するライブラリの種類を選択しないことがあり、検索パスに頼るよりも、リンク先の正確なライブラリを(両方の場合は指定されているため、第二の方法が好ましい

cpp.dynamicLibraries: ["/home/r0ng/tools/myapp/libs/relic/lib/librelic.so"] 

こと静的で動的なバージョンが存在する)。

私たちのcpp.dynamicLibrariescpp.staticLibrariesのプロパティは、意図された用途を説明するためによく文書化されるべきであると認めます。


referencesに関しては、はい、あなたは関係なく、そのファイルシステムの場所のいずれかのファイルパスを参照することができます。 Dependsについて


は、その項目のnameプロパティには、上の依存関係を作成するための製品やモジュールの名前を指定します。たとえば、qbsSearchPathsまたはreferencesのプロパティを使用した結果としてロードされているなど、そのような製品またはモジュールがプロジェクトツリーに既に存在している必要があります。

+1

お返事ありがとうございます:) – r0ng

関連する問題