2009-09-13 3 views
59

Qt를 배우기 시작했습니다. 비주얼 스튜디오 세계에서 움직이고 있으며 QMake를 사용하여 프로젝트 구조를 구성 할 방법을 찾고 있습니다. 'subdirs'템플릿을 찾았지만 이해하는데 어려움이 있습니다.QMake의 subdirs 템플릿을 사용하는 방법은 무엇입니까?

내 프로젝트 구조는 다음과 같습니다

project_dir/ 
    main.cpp 
    project.pro 
    logic/ 
     logic.pro 
     some logic files 
    gui/ 
     gui.pro 
     gui files 

내 하위 디렉토리에 대한 .PRO 파일에서이

TEMPLATE = subdirs 
SUBDIRS = logic \ 
      gui 
SOURCES += main.cpp 

내가 적절한 출처이 같은 project.pro 보인다 , 헤더들자원들 변수가 설정되었습니다.

나는 .PRO 파일에 설정해야하는지 TARGET, TEMPLATE 및 기타 필요한 값을 가르쳐주세요.

공식적인 QMake 튜토리얼이 있습니까?

답변

80

Troubadour's comment 외에도 SUBDIRS 대상은 하위 디렉터리 지정에 유용합니다. 따라서 project.pro 파일에

SOURCES += main.cpp 

의 추가 줄이 잘못되어 최악의 경우 main.cpp 파일을 빌드하지 못할 수도 있습니다. 기껏해야, qmake는 파일에 구문이 충돌하기 때문에 파일을 구문 분석하지 않습니다.

나는 SUBDIRS 템플릿을 몇 번 사용해 본 적이 있습니다. 로직과 gui를 가지고있는 것처럼 자주 또는 더 적은 독립 라이브러리에 부품을 만들 수 있다면 잘됩니다.

project_dir/ 
-project.pro 
-common.pri 
-logic/ 
----logic.pro 
----some logic files 
-gui/ 
----gui.pro 
----gui files 
-build/ 
----build.pro 
----main.cpp 

project.pro :

TEMPLATE = subdirs 
SUBDIRS = logic \ 
      gui 

# build must be last: 
CONFIG += ordered 
SUBDIRS += build 

일반적인 여기에이 작업을 수행하는 하나의 방법입니다.PRI :

#Includes common configuration for all subdirectory .pro files. 
INCLUDEPATH += . .. 
WARNINGS += -Wall 

TEMPLATE = lib 

# The following keeps the generated files at least somewhat separate 
# from the source files. 
UI_DIR = uics 
MOC_DIR = mocs 
OBJECTS_DIR = objs 

논리/logic.pro :

# Check if the config file exists 
! include(../common.pri) { 
    error("Couldn't find the common.pri file!") 
} 

HEADERS += logic.h 
SOURCES += logic.cpp 

# By default, TARGET is the same as the directory, so it will make 
# liblogic.a (in linux). Uncomment to override. 
# TARGET = target 

GUI/gui.pro :

! include(../common.pri) { 
    error("Couldn't find the common.pri file!") 
} 

FORMS += gui.ui 
HEADERS += gui.h 
SOURCES += gui.cpp 

# By default, TARGET is the same as the directory, so it will make 
# libgui.a (in linux). Uncomment to override. 
# TARGET = target 

빌드/build.pro :

TEMPLATE = app 

SOURCES += main.cpp 

LIBS += -L../logic -L../gui -llogic -lgui 

# Will build the final executable in the main project directory. 
TARGET = ../project 
+0

project.pro의 SOURCES 지시문에 대한 좋은 지적. 나는 그것을 완전히 놓쳤다. – Troubadour

+0

이 포괄적 인 답변 주셔서 감사합니다. 제 학습을 시작하는 것이 좋은 포인트입니다. – zarzych

+0

"주문한"것은 세계적인 느낌입니다. 처음 두 라이브러리를 동시에 만드는 것은 아닙니다. –

16

logic 및 gui 폴더가 실제로 어떤 대상을 반박한다면 subdirs을 사용합니다 (예 : subdirs). 도서관은 다른 어떤 것과도 독립적으로 구축 될 수 있습니다. 그럴 경우

TEMPLATE = lib 
TARGET = logic 
CONFIG += dll 

을 logic.pro에 사용하십시오. 그렇지 않은 독립적 인 목표이지만 그냥 기억 .PRO 사용

include(logic/logic.pri) 
include(gui/gui.pri) 

내에서를 다음 방금 각 대신에 개의 .pri 파일을 사용할 수있는 소스 파일을 구성하는 존재 포함 폴더 그냥 경우

.pri 파일의 파일 경로가 .pro 파일과 관련이 있고 이 아니고 인 .pri 파일입니다. BTW에서는 .pro 파일의 해당 폴더에있는 파일을 .pro 파일에 직접 나열 할 수 있으므로 .pri 파일의 사용은 선택 사항입니다. .pri 파일은 조금 더 깔끔하게 만들고 .pro 파일을 더 짧게 유지하는 데 도움이됩니다.

+2

에서 내가 배웠다 .pri 파일 방법은 Qt Creator가 각 .pri 파일과 그 cont에 대한 하위 폴더를 표시하도록합니다 ents. – zarzych

+3

@zarzych : 사실입니다.하지만 .pri 파일이 파일 시스템에있는 곳을 성가 시게 존중하지 않고 .pro 파일을 .pro 수준의 플랫 목록으로 표시합니다. 같은 이름을 가진 몇 개가 있으면 특히 짜증이납니다. – Troubadour

관련 문제