2014-02-17 3 views
4

지금 템플릿 기반의 헤더 전용 라이브러리를 사용하는 프로젝트가 두 개 있습니다. 다음과 같이Qt에 헤더 전용 라이브러리가있는 프로젝트 관리

내 폴더 구조는 다음과 같습니다

HEADERS += ../lib/someHeader.h 

내가 base/app1/app1.probase/app2/app2.pro에 포함 :

base/lib 
base/app1 
base/app2 

내가 지금 당장 할 것은 내가 보이는 base/lib/lib.pri을 가지고있다.

그러나, QtCreator, 그것은 두 가지 이유로 다소 추한 외모 :

  • .pri 파일의 경로가에서 포함되는 위치에 따라 달라집니다. 예를 들어, 어떤 이유로 든 폴더에 있기를 원하는 다른 앱이 있다면 anotherBase/app3/ 그것은 작동하지 않습니다.

    app1 
        -> app1.pro 
        -> headers 
        -> source files 
        -> lib/ 
         -> lib.pri 
         -> headers 
          -> someHeader.h 
    app2 
        -> app2.pro 
        -> headers 
        -> source files 
        -> lib/ 
         -> lib.pri 
         -> headers 
          -> someHeader.h 
    

    은 그러므로 내가 두 번이

(I 코드 꽤 인쇄를하기 위해 목록 후 텍스트를 넣어 가지고있는 것처럼 보이는) : 같은 프로젝트 트리에

  • 가 보인다 트리 뷰에서 라이브러리 파일.

    최적화 방법이 있습니까? I가 컴파일 아무것도 없다는 것을 모두가 불평 컴파일 할 때 다음 그러나 나는 .prolib에 assing 경우, 트리 뷰에서

    app1 
        -> app1.pro 
        -> headers 
        -> source files 
    app2 
        -> app2.pro 
        -> headers 
        -> source files 
    lib 
        -> lib.pri 
        -> headers 
    

    하고 그것을 자신의 프로젝트를 만들 : 내가하고 싶은 lib를 수정하고 오류를 만드십시오 ...

    고마워요!

  • +0

    어떤 컴파일러를 사용합니까? 나는'TEMPLATE = lib' .pro-file을 만들려고했는데, gcc 4.4가 "컴파일 할 것이 없다"고 불평하지 않는 것처럼 보입니다.이 경우 빈 라이브러리 만 생깁니다. –

    답변

    3

    .pri 파일에서 모든 경로를 $$PWD으로 참조해야합니다. 이 변수는 현재 구문 분석 된 파일의 전체 경로, 즉 포함 파일을 포함합니다.

    가끔씩 같은 값을 반환하더라도 _PRO_FILE_PWD_과 다른 의미를가집니다.

    1

    문제의 해결 방법을 찾은 것 같습니다. 일종의 해킹이지만 잘 작동합니다. 헤더 전용 lib에 대해 별도의 .pro 파일을 만들고 TEMPLATE = subdirs을 지정할 수 있지만 SUBDIRS 변수는 할당되지 않은 상태로 둡니다. 이 .pro-file에 라이브러리의 헤더를 나열하십시오.

    TEMPLATE = subdirs 
    HEADERS += h1.h \ 
          h2.h 
    

    qmake를 지금이 .PRO 파일이 어떤 "대상"을 생성하지 것을 이해하지만, 당신이 그들을 편집 할 수 있도록 QT 크리에이터 프로젝트 트리에있는 모든 헤더를 표시합니다 : 그것은 다음과 같이 보일 것입니다 일반 프로젝트의 헤더. 그리고 라이브러리는 프로젝트 트리를 한 번만 적절한 트리 수준으로 입력합니다.

    +0

    아아, 나는 그것이 표준 C++ 프로젝트를위한 훌륭한 솔루션이 될 것이라고 생각하지만, 헤더에 정의 된 Qt 객체를 가지고있다. @Kuba Oder의 솔루션을 사용하면 moc가 헤더 파일에서 실행되지만 여기서는 그렇지 않다. 많은 상징은 연결될 때 정의되지 않는다. –