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 project file(.pro) (Qt프로그래밍) |작성자 jsmak
'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 |