qt project file(.pro)

Qt 2011. 5. 16. 10:31

QMAKE

 

QMAKE Makefile generator이다. qt에서 프로젝트 파일은 확장자가 .pro 파일을 생성하는데 qmake pro파일을 가자고 Makefile을 생성한다..pro파일은 qmake -project라는 명령어를 통해서 자동으로 생성가능하다.<?xml:namespace prefix = o /><?xml:namespace prefix = o />

이번 절에서는 .pro파일의 내부 문법에 대해서 살펴보겠다.

QMAKE에 대한 자세한 설명은

http://doc.trolltech.com/4.5/qmake-manual.html 에 자세히 나와있다.

 

일반적인 .pro파일을 살펴보자

======================================================================================= 

TEMPLATE = app

INCLUDEPATH += .

 

# Input

HEADERS += ledmeter.h sprites.h toplevel.h view.h

SOURCES += ledmeter.cpp main.cpp toplevel.cpp view.cpp

#The following line was inserted by qt3to4

QT +=  qt3support

 

HEADERS += animateditem.h

SOURCES += animateditem.cpp

 

RESOURCES += portedasteroids.qrc

 

# install

target.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/portedasteroids

sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS portedasteroids.pro bg.png sounds sprites

sources.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/portedasteroids

INSTALLS += target sources

 ==========================================================================================

 

파일을 보면 대부분 A = B의 형식으로 이루어 져 있다.

A를 시스템변수라 한다. 시스템변수는 대문자로 정의된다.

A = B의 의미는 대입이고, A += B는 추가, A -= B는 삭제이다.

예를 들어

SOURCES = ledmeter.cpp main.cpp

SOURCES = toplevel.cpp view.cpp

로 사용하면 결국

SOURCES = toplevel.cpp view.cpp

이다.

 

하지만

SOURCES = ledmeter.cpp main.cpp

SOURCES += toplevel.cpp view.cpp

이면

SOURCES = ledmeter.cpp main.cpp toplevel.cpp view.cpp

와 같다.

 

여러줄을 사용하려면 \(backslash)를 사용한다.

SOURCES = ledmeter.cpp \

main.cpp \

toplevel.cpp \

view.cpp

 

주석은 # 으로 시작하면 된다.

 

프로젝트 파일 내에서 변수를 사용할 수 있다.

변수는 $$을 사용하면 된다.

)

PARSER = myparser.cpp

SOURCE = main.cpp $$PASER

 

SOURCE *= main.cpp 라고 사용하면 main.cpp가 변수리스트에 없을 때만 추가한다는 의미이다. 이미 있는 경우 아무일도 하지 않는다.

 

그럼 각 항목의 시스템 변수가 의미하는 바를 살펴보자.

 

1. SYSTEM변수

TEMPLATE

프로젝트 파일의 타입을 정의한다. app, vcapp, lib, vclib, subdirs 등이 올수 있다.

TEMPLATE = app : 독입적인 어플리케이션 (default값이다. 생략하면 app가 기본)

TEMPLATE = lib : static lib 또는 shared lib

TEMPLATE = subdirs : 내용은 없고 하위 디렉토리를 정의한다는 의미이다.

HEADERS 

해터파일을 적는다.

ex) HEADERS += animateditem.h

 

SOURCES

소스파일이다.

SOURCES += ledmeter.cpp main.cpp toplevel.cpp view.cpp

 

TARGET

실행파일의 이름이다. 보통 gcc 컴파일 시 –o 옵션 뒤에 붙는 이름이다.

생략 시 .pro 파일 앞에 붙는 이름이 default 값이 된다.

 

DEFINES

Define . gcc 컴파일 시 –D  옵션뒤에 붙는 옵션이다.

ex) DEFINES += HAVE_KEYBOARD

 

LIBS

프로젝트에 링크할 라이브러리를 지정한다.

라이브러리는 절래경로를 사용해 지정하거나 –L 옵션과 –l 과 같이 사용된다.

ex) LIBS += -lpng -L../../lib

 

INCLUDEPATH

전역 헤더 파일의 위치를 찾기위한 경로 지정. –I 옵션과 같은 역할

ex) INCLUDEPATH += ../shared

 

DESTDIR

실행 이미지가 설치될 디렉토리를 지정한다. 기본값은 플랫폼에 따라 다른데, 리눅스의 경우 현재 디렉토리에 실행파일이 생성되고, 윈도우에서는 debug release 디렉토리 아래 생성된다.

ex) DESTDIR = ../../../../bin

 

DEPENDPATH

QMAKE dependency 검색 시 사용되는 경로를 지정한다.

ex) DEPENDPATH = ../../include

MOC_DIR

moc 파일들이 생성되는 경로를 지정한다.

ex) MOC_DIR=$$OUT_PWD/.moc

 

SUBDIRS

하위 디렉토리에 있는 .pro 파일을 재귀적으로 호출될 수 있도록 하위 디렉토리를 지정한다.

ex) SUBDIRS += qtestlib designer

 

FORMS

uic에 의해 처리되는 QT디자이너로 생성된 .ui파일을 지정한다.

ex) FORMS += mainwindow.ui

 

RESOURCES

rcc에 의해 처리되는 실행파일내에 포함되는 리소스파일을 정의한 xml파일 .qrc를 지정한다.

ex) RESOURCES += assistant.qrc

 

VERSION

target 라이브러리의 버전 번호를 지정한다.

ex) VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}

 

DLLDESTDIR

dll파일이 설치될 경로를 지정한다. (디폴트값은 DESTDIR)

ex) DLLDESTDIR = $$OUTPUT_DIR/bin

 

QT

프로젝트에 사용될 Qt의 모듈을 지정한다.

디폴트값은 core gui이다. 이는 QtCore 모듈과 QtGui 모듈을 포함한다는 의미이다.

QT에 지정되는 모듈은 대랴

core gui network opengl sql svg xml xmlpatterns qt3support 등이 있다.

Qt Creator에서 Qt모듈을 클릭하여 설정하는데 설정 시 .pro파일에 선택된 모듈들이 포함되는 것을 볼 수 있다.

 

CONFIG

CONFIG 변수는 빌드시 다양한 옵션들을 제어하기 위해 사용된다.

CONFIG += release warn_on qt 등의 형식으로 사용된다.

CONIFG와 사용되는 변수들

debug

compile with debug options enabled

release

compile with optimization enabled, ignored if debug is specified

warn_on

The Compiler should emit more warnings than normally

warn_off

The Compiler should emit no warnings or as few as possible

ordered

Order subdirectories so parallelized builds work

qt

The target is a Qt application/library and requires Qt header file/library

opengl

The target require the OpenGL(or Mesa)

thread

The target is a multi threaded application or library

x11

The target is an X11 application or library

windows

The target is Win32 window application

console

The target is a Win32 console application

shared

The target is a shared object/DLL

static

The target is a static library

plugin

The target is a plugin(requires TARGET=lib, and implies shared)

exceptions

Turn on compiler exception support

rtti

Turns on compiler RTTI support

stl

Turns on Qt STL support

flat

only for TEMPLATE=vcapp; puts all sources files into one group and all header files into another group, independedt of the directory structure

 

2. 내장함수

qmake에서 여러가지 편리한 내장함수를 사용할 수 있는데 자주 사용되는 함수를 살펴 보겠다.

 

조건문

기본 문법은 아래와 같다.

condition {

    then-case

} else {

    else-case

}

{ 문은 반드시 condition 옆에 있어야 하고 }는 하나의 라인이어야 한다.

,

condition

{

then-case } 등으로 인식되지 않는다.

 

이제 사용예를 보자

win {

   debug {

      SOURCE += debug.cpp

   } else {

      SOURCE += release.cpp

   }

}

 

위 문장은 다음과 같이 사용할 수 있다.

condition:then-case

사용예

debug:SOURCE+=debug.cpp

else:SOURCE+=release.cpp

 

이경우 !(이 아닐경우)를 사용할 수 있다.

!debug:SOURCE+=release.cpp

 

isEmpty(variablename)

변수가 비었는지를 검사한다.

사용예

isEmpty(VERSION) {

   VERSION=4.3.0

}

 

CONFIG(config)

조건분과 유사하다. mutual exclusion을 사용할 수 있다.

사용예

CONFIG(release) {

   then-case

}

 

count(variablename, number)

변수가 number을 포함하고 있는지 판단한다.

사용예)

foo=$$bar()

count(foo,1):QMAKE_BEHAVIORS+=func_out_join

 

contains(variablename, value)

변수가 value을 포함하는지를 판단한다. 많이 사용되는 함수이다.

사용예)

contains(QT_CONFIG, webkit): SUBDIRS += qwebview

 

system (command)

shell command(외부 명령어)를 사용하여 조건을 사용한다.

사용예)

system(ls /bin):HAS_BIN=FALSE

 

$$system(command)를 사용해서 stdout 결과를 리턴할 수도 있다.

OS_VERSION= $$system(uname –r)

 

error( txt)

이 함수는 txt를 사용자에게 보여주고 qmake를 종료한다.

 

message( txt)

사용자에게 txt를 화면에 출력한다. warning와 동일

사용예)

message( "This is a message" )

 

include (filename)

다른 파일을 가져온다.

주로 pri파일을 가져온다.

include(../src/common.pri)

여러 pro파일을 여러가 만들 때 공통되는 부분을 .pri 파일로 빼서 외부에 저장하고 위와 같이 include 한다.

 

exists( filename)

파일이 있는지 체크한다.

사용예)

!exists(file.dat) : error(“file.dat missing”)

 

basename (file)

파일의 경로와 확장자를 뺀 이름을 리턴한다.

사용예)

FILE = /etc/passwd

FILENAME = $$basename(FILE) #passwd

 

dirname( file)

파일에 포함된 경로만 리턴한다.

사용예)

FILE = /etc/X11R6/XF86Config

DIRNAME = $$dirname(FILE) #/etc/X11R6

 

prompt (question)

질문을 화면에 출력하고 사용자 입력을 받을 수 있다

ANSWER = $$prompt(“Do you read the condition?”)

 

for( iterator, list)

list를 반복한다. 일반적인 for 문이다. 아래 예에서 1 .. 4 로 사용할 수 있다.

사용예)

LIST = 1 2 3 4

for(a, LIST) {

   exists(file.$${a}):message(I see a file.$${a}!)

}

 

unique (variablename)

변수내의 중복인자를 없애고 새 리스트를 리턴한다.

사용예)

ARGS = 1 2 3 2 5 1

ARGS = $$unique(ARGS) #1 2 3 5

 

lower(variablename)

소문자로 변환한다.

사용예)

SOURCE = $$lower($$MY_CLASSES)

 

'Qt' 카테고리의 다른 글

Qt 4.7 and MySQL-plugin with Mingw on Windows XP(Eclipse)  (0) 2011.06.22
qt 이미지 출력  (0) 2011.06.03
형변환, 숫자, 문자, int, QString  (0) 2011.04.18
Qt를 Wince6.0에 Build하는방법  (0) 2011.04.08
Qt Supported Platforms  (0) 2011.04.06
Posted by 요지
,