2016-10-19 5 views
1

하위 템플릿이있는 qtcreator 프로젝트가 있습니다.qmake 하위 폴더 템플릿으로 빌드 한 후 첫 번째 프로젝트를 설치하는 방법은 무엇입니까?

: 그래서 나는 staticLib.pro 파일의 설치 옵션을 추가

TEMPLATE = subdirs 
CONFIG += ordered 

SUBDIRS = staticLib \ 
      testApp 

testApp.depends = staticLib 

내가 정적 라이브러리를 설치하고자 :

mainProject/ 
    mainProject.pro 
    staticLib/ 
     (bunch of .cpp and .h files) 
     staticLib.pro 
    testApp/ 
     main.cpp 
     testApp.pro 

그리고 mainProject.pro 파일 : 폴더는 다음과 같습니다

headersDataFiles.path = $$LIBPATH/include 
headersDataFiles.files = $$PWD/*.h 
INSTALLS += headersDataFiles 

libraryFiles.path = $$LIBPATH/lib 
Debug:libraryFiles.files = $$OUT_PWD/debug/*.a 
Release:libraryFiles.files = $$OUT_PWD/release/*.a 
INSTALLS += libraryFiles 

문제는 내가 Qtcreator에서 프로젝트를 빌드 할 때 정적 라이브러리를 빌드 한 다음 make install을 먼저 실행하지 않고 애플리케이션을 빌드 할 때 문제가 발생하여 앱 빌드가 실패합니다. 그리고 Qtcreator는 qmake_all (lib를 먼저 설치하지 않고 두 프로젝트를 빌드) 이후에 빌드 단계를 추가 할 수있게 해줍니다.

그래서 질문은, 내가 staticLib 프로젝트를 빌드하고, 설치 한 다음 testApp을 빌드 할 수있는 방법이 있습니까?

EDIT : testApp 프로젝트는 항상 첫 번째 프로젝트의 출력 디렉토리에서 라이브러리에 링크 될 수 있습니다. 그러나 .a 및 헤더 파일을 다른 폴더로 이동하여 프로젝트를 체계적으로 구성하고 싶습니다. testApp 빌드 실패는 문제가 아닙니다. 오해를해서 죄송합니다.

+0

의존성이있는 정적 라이브러리를 사용하여 무언가를 컴파일하려면 설치가 필요하지 않습니다. testApp.pro에서 잘못 설정된 것처럼 보입니다 - 공유 할 수도 있습니까? Qt Creator를 통해 testApp에 ​​정적 라이브러리를 추가하려고 시도 했습니까? –

+0

예, 맞습니다. 설치는 다시하지 않습니다. 사실 내가 원하는 것을 시스템에 설치하는 것이 아니라 생성 된 .a 및 헤더를 프로젝트의 다른 폴더로 이동하여 프로젝트를 체계적으로 정리할 수 있습니다. 의견을 보내 주셔서 감사 드리며 오해를해서 죄송합니다. 질문을 편집했습니다. –

답변

1

다른 개발 환경 AFAIK를 통해 영속적이지 않기 때문에 나는 Qt 생성자에서 단계를 추가하는 아이디어를 좋아하지 않습니다 (물론 유일한 방법은 아닙니다). 예를 들어, 다른 머신의 저장소에서 코드를 다운로드/복제 할 때마다이 단계를 Qt Creator에 추가해야합니다.

우리가 윈도우 (단, 그것은 또한 다른 플랫폼에서 작동합니다)에 그것을 한 적이 방식은 QMAKE_POST_LINK 및 $$ QMAKE_COPY (사전 정의 qmake를 크로스 플랫폼 복사 명령)를 통해됩니다 :

FILES_TO_COPY = $$DESTDIR/staticLib.a <path to your header1> <path to your header2> 

또는 당신이 선호하는 경우 :

FILES_TO_COPY = $$DESTDIR/staticLib.a 
FILES_TO_COPY += <path to your header1> 
FILES_TO_COPY += <path to your header2> 

당신은 헤더의 전체 경로를 하드 코딩하지 않도록, $$ PWD처럼 바르를 사용할 수 있으며, 다음

DESTINATION_DIR = $$shell_quote($$shell_path("/put/it/here/")) 
for (FILE, FILES_TO_COPY) 
{ 
    FILE_PATH = $$shell_quote($$shell_path($$FILE)) 
    QMAKE_POST_LINK += $$QMAKE_COPY $$FILE_PATH $$DESTINATION_DIR $$escape_expand(\\n) 
} 

UPD : 하나의 디렉토리에 필요한 모든 헤더가있는 경우 QMAKE_COPY 대신 QMAKE_COPY_DIR을 사용할 수 있습니다.

또한 특정 플랫폼에서 빌드하려는 경우 $$ shel_quote/$$ shell_path를 생략하고 올바른 경로 만 쓸 수 있습니다.