2016-07-12 3 views
2

여러 수준의 프로젝트에서 작업하고 있습니다. 개인적으로, 나는 qbs에 익숙하지 않고 내부에 대한 많은 문서와 예제가 없다.라이브러리와 Qt qbs 프로젝트 설정을 찾을 수 없습니다. 컴파일 오류

환경 :

Qt5.6.1; Qt 크리에이터 4.01; 우분투 16.04; Qbs 1.5.1

다음은 프로젝트의 계층 구조입니다.

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

}

myapp.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 같은 것이있다 : 최상위 수준에, 그것은 project.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"...] 
} 

마지막으로 우리 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를 구성하여 빌딩 프로세스가 작동하도록하려면 어떻게해야합니까?

또 다른 질문은 키워드 "references"에 관한 것입니다. 프로젝트의 모든 레벨에서 다른 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

관련 문제