고급 사용법
새로운 구성 기능 추가하기
qmake를 사용하면 CONFIG 변수에 지정된 값 목록에 이름을 추가하여 프로젝트 파일에 포함할 수 있는 자신만의 features
을 만들 수 있습니다. 기능은 여러 표준 디렉터리 중 하나에 있을 수 있는 .prf
파일에 있는 사용자 정의 함수 및 정의의 모음입니다. 이러한 디렉터리의 위치는 여러 곳에 정의되어 있으며, qmake는 .prf
파일을 찾을 때 다음 순서로 각 디렉터리를 확인합니다:
- 플랫폼의 경로 목록 구분자(유닉스의 경우 콜론, 윈도우의 경우 세미콜론)로 구분된 디렉터리 목록이 포함된
QMAKEFEATURES
환경 변수에 나열된 디렉터리에서. QMAKEFEATURES
속성 변수에 나열된 디렉터리로, 플랫폼의 경로 목록 구분 기호로 구분된 디렉터리 목록이 포함되어 있습니다.mkspecs
디렉터리 내에 있는 기능 디렉터리에서mkspecs
디렉터리는 플랫폼의 경로 목록 구분 기호로 구분된 디렉터리 목록이 포함된QMAKEPATH
환경 변수에 나열된 디렉터리 아래에 위치할 수 있습니다. 예:$QMAKEPATH/mkspecs/<features>
.- QMAKESPEC 환경 변수에 의해 제공되는 디렉토리 아래에 있는 기능 디렉터리에서. 예:
$QMAKESPEC/<features>
. data_install/mkspecs
디렉터리에 있는 기능 디렉터리에 있습니다. 예:data_install/mkspecs/<features>
.QMAKESPEC
환경 변수에 의해 지정된 디렉터리의 형제 디렉터리로 존재하는 기능 디렉터리에 있습니다. 예:$QMAKESPEC/../<features>
.
다음 기능 디렉터리에서 기능 파일을 검색합니다:
features/unix
,features/win32
, 또는features/macx
, 사용 중인 플랫폼에 따라 다릅니다.features/
예를 들어 프로젝트 파일에 다음과 같은 할당이 있다고 가정해 보겠습니다:
CONFIG += myfeatures
CONFIG
변수를 추가하면 qmake는 프로젝트 파일 구문 분석을 완료한 후 위에 나열된 위치에서 myfeatures.prf
파일을 검색합니다. 유닉스 시스템에서는 다음 파일을 찾습니다:
$QMAKEFEATURES/myfeatures.prf
(QMAKEFEATURES
환경 변수에 나열된 각 디렉토리에 대해)$$QMAKEFEATURES/myfeatures.prf
(QMAKEFEATURES
속성 변수에 나열된 각 디렉토리에 대해)myfeatures.prf
(프로젝트의 루트 디렉터리에 있음). 프로젝트 루트는 최상위 수준.pro
파일에 의해 결정됩니다. 그러나.qmake.cache
파일을 하위 디렉터리 또는 하위 프로젝트의 디렉터리에 배치하면 프로젝트 루트가 하위 디렉터리 자체가 됩니다.$QMAKEPATH/mkspecs/features/unix/myfeatures.prf
및$QMAKEPATH/mkspecs/features/myfeatures.prf
(QMAKEPATH
환경 변수에 나열된 각 디렉터리에 대해)$QMAKESPEC/features/unix/myfeatures.prf
및$QMAKESPEC/features/myfeatures.prf
data_install/mkspecs/features/unix/myfeatures.prf
및data_install/mkspecs/features/myfeatures.prf
$QMAKESPEC/../features/unix/myfeatures.prf
및$QMAKESPEC/../features/myfeatures.prf
참고: .prf
파일은 소문자로 된 이름이어야 합니다.
파일 설치하기
유닉스에서는 빌드 도구를 사용하여 애플리케이션과 라이브러리를 설치하는 것이 일반적입니다(예: make install
를 호출하는 방식). 이러한 이유로 qmake에는 프로젝트의 일부를 설치하는 방법에 대한 지침이 포함된 install set
객체라는 개념이 있습니다. 예를 들어, 문서 파일 모음은 다음과 같은 방식으로 설명할 수 있습니다:
documentation.path = /usr/local/program/doc documentation.files = docs/*
path
멤버는 파일이 /usr/local/program/doc
(경로 멤버)에 설치되어야 함을 qmake에 알려주고 files
멤버는 설치 디렉터리에 복사해야 할 파일을 지정합니다. 이 경우 docs
디렉터리에 있는 모든 파일이 /usr/local/program/doc
으로 복사됩니다.
설치 세트가 완전히 설명되면 다음과 같은 줄로 설치 목록에 추가할 수 있습니다:
INSTALLS += documentation
qmake는 지정된 파일이 설치 디렉터리에 복사되도록 합니다. 이 프로세스를 더 자세히 제어해야 하는 경우 개체의 extra
멤버에 대한 정의를 제공할 수도 있습니다. 예를 들어, 다음 줄은 이 설치 집합에 대해 일련의 명령을 실행하도록 qmake에 지시합니다:
unix:documentation.extra = create_docs; mv master.doc toc.doc
unix
범위는 이러한 특정 명령이 Unix 플랫폼에서만 실행되도록 합니다. 다른 플랫폼에 적합한 명령은 다른 범위 규칙을 사용하여 정의할 수 있습니다.
extra
멤버에 지정된 명령은 개체의 다른 멤버에 있는 명령이 수행되기 전에 실행됩니다.
INSTALLS
변수에 기본 설치 세트를 추가하고 files
또는 extra
멤버를 지정하지 않으면 qmake가 복사해야 할 항목을 결정합니다. 현재 target
및 dlltarget
설치 세트가 지원됩니다. 예를 들어
target.path = /usr/local/myprogram INSTALLS += target
위 줄에서 qmake는 복사해야 할 항목을 알고 설치 프로세스를 자동으로 처리합니다.
사용자 지정 대상 추가하기
qmake는 크로스 플랫폼 빌드 도구에서 예상되는 모든 작업을 수행하려고 합니다. 하지만 플랫폼에 종속된 특수 명령을 실행해야 할 때는 이 방법이 이상적이지 않을 때가 많습니다. 이는 다른 qmake 백엔드에 대한 특정 지침을 사용하여 달성할 수 있습니다.
메이크파일 출력의 사용자 지정은 qmake의 다른 위치에서 볼 수 있는 객체 스타일 API를 통해 수행됩니다. 객체는 멤버를 지정하면 자동으로 정의됩니다. 예를 들어:
mytarget.target = .buildfile mytarget.commands = touch $$mytarget.target mytarget.depends = mytarget2 mytarget2.commands = @echo Building $$mytarget.target
위의 정의는 touch
명령으로 생성되는 .buildfile
이라는 Makefile 대상을 포함하는 mytarget
이라는 qmake 대상을 정의합니다. 마지막으로 .depends
멤버는 mytarget
이 이후에 정의되는 또 다른 대상인 mytarget2
에 종속되도록 지정합니다. mytarget2
은 더미 대상입니다. 콘솔에 일부 텍스트를 에코하기 위해서만 정의됩니다.
마지막 단계는 QMAKE_EXTRA_TARGETS
변수를 사용하여 이 오브젝트가 빌드할 대상임을 qmake에 지시하는 것입니다:
QMAKE_EXTRA_TARGETS += mytarget mytarget2
이것이 실제로 사용자 정의 타깃을 빌드하기 위해 필요한 전부입니다. 물론 이러한 타깃 중 하나를 qmake 빌드 타깃에 연결하고 싶을 수도 있습니다. 이렇게 하려면 PRE_TARGETDEPS 목록에 메이크파일 타깃을 포함하기만 하면 됩니다.
사용자 지정 타겟 사양은 다음 멤버를 지원합니다:
멤버 | 설명 |
---|---|
명령 | 커스텀 빌드 타깃을 생성하기 위한 명령어입니다. |
CONFIG | 커스텀 빌드 타겟에 대한 특정 구성 옵션입니다. recursive 로 설정하여 하위 타겟 특정 메이크파일 내에서 관련 타겟을 호출하기 위해 메이크파일에 규칙을 생성해야 함을 나타낼 수 있습니다. 이 멤버는 기본적으로 각 하위 대상에 대한 항목을 생성합니다. |
depends | 사용자 지정 빌드 타깃이 종속되는 기존 빌드 타깃입니다. |
recurse | 하위 대상 특정 메이크파일에서 호출하기 위해 메이크파일에서 규칙을 만들 때 사용할 하위 대상을 지정합니다. 이 멤버는 CONFIG 에서 recursive 이 설정된 경우에만 사용됩니다. 일반적인 값은 "Debug" 및 "Release"입니다. |
recurse_target | 메이크파일의 규칙에 대한 하위 대상 메이크파일을 통해 빌드해야 하는 대상을 지정합니다. 이 멤버는 $(MAKE) -f Makefile.[subtarget] [recurse_target] 와 같은 것을 추가합니다. 이 멤버는 CONFIG 에 recursive 이 설정된 경우에만 사용됩니다. |
target | 사용자 지정 빌드 대상의 이름입니다. |
컴파일러 추가
새로운 컴파일러와 전처리기를 지원하도록 qmake를 사용자 정의할 수 있습니다:
new_moc.output = moc_${QMAKE_FILE_BASE}.cpp new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,," new_moc.input = NEW_HEADERS QMAKE_EXTRA_COMPILERS += new_moc
위의 정의에 따라 사용 가능한 경우 moc 대신 드롭인 대체 기능을 사용할 수 있습니다. 이 명령은 NEW_HEADERS
변수에 주어진 모든 인수( input
멤버에서)에 대해 실행되며, 결과는 output
멤버에 의해 정의된 파일에 기록됩니다. 이 파일은 프로젝트의 다른 소스 파일에 추가됩니다. 또한 qmake는 depend_command
을 실행하여 종속성 정보를 생성하고 이 정보도 프로젝트에 배치합니다.
사용자 정의 컴파일러 사양은 다음 멤버를 지원합니다:
멤버 | 설명 |
---|---|
명령 | 입력에서 출력을 생성하는 데 사용되는 명령어입니다. |
CONFIG | 사용자 지정 컴파일러에 대한 특정 구성 옵션입니다. 자세한 내용은 CONFIG 표를 참조하세요. |
depend_command | 출력에 대한 종속성 목록을 생성하는 데 사용되는 명령을 지정합니다. |
의존성_유형 | 출력의 파일 유형을 지정합니다. 알려진 유형(예: TYPE_C, TYPE_UI, TYPE_QRC)인 경우 해당 유형의 파일 중 하나로 처리됩니다. |
depends | 출력 파일의 종속성을 지정합니다. |
input | 사용자 정의 컴파일러로 처리할 파일을 지정하는 변수입니다. |
name | 사용자 정의 컴파일러가 수행하는 작업에 대한 설명입니다. 일부 백엔드에서만 사용됩니다. |
output | 사용자 정의 컴파일러에서 생성되는 파일 이름입니다. |
output_function | 생성할 파일명을 지정하는 데 사용되는 사용자 정의 qmake 함수를 지정합니다. |
variables | 여기에 지정된 변수가 프로 파일에서 $(VARNAME)으로 참조될 때 $(QMAKE_COMP_VARNAME)으로 대체됨을 나타냅니다. |
variable_out | 출력에서 생성된 파일이 추가될 변수입니다. |
CONFIG 멤버는 다음 옵션을 지원합니다:
옵션 | 설명 |
---|---|
결합 | 모든 입력 파일이 하나의 출력 파일로 결합됨을 나타냅니다. |
target_predeps | 출력을 PRE_TARGETDEPS 목록에 추가해야 함을 나타냅니다. |
명시적_종속성 | 출력에 대한 종속성은 의존성 멤버에서만 생성되고 다른 곳에서는 생성되지 않습니다. |
dep_existing_only | .depend_command의 결과인 모든 종속성이 존재하는지 확인합니다. 존재하지 않는 종속성은 무시됩니다. 이 값은 Qt 5.13.2에 도입되었습니다. |
dep_lines | .depend_command의 출력은 한 줄당 하나의 파일로 해석됩니다. 기본값은 공백으로 분할하는 것이며 이전 버전과의 호환성을 위해서만 유지됩니다. |
no_link | 링크할 개체 목록에 출력을 추가하지 않아야 함을 나타냅니다. |
라이브러리 종속성
라이브러리에 링크할 때 종종 qmake는 기본 플랫폼에 의존하여 이 라이브러리가 링크하는 다른 라이브러리를 파악하고 플랫폼이 이를 가져올 수 있도록 합니다. 그러나 많은 경우 이것만으로는 충분하지 않습니다. 예를 들어, 라이브러리를 정적으로 링크할 때는 다른 라이브러리가 링크되지 않으므로 해당 라이브러리에 대한 종속성이 생성되지 않습니다. 그러나 나중에 이 라이브러리에 대해 링크하는 애플리케이션은 정적 라이브러리에 필요한 심볼을 어디에서 찾을 수 있는지 알아야 합니다. 명시적으로 추적을 활성화하면 qmake는 적절한 경우 라이브러리의 종속성을 추적하려고 시도합니다.
첫 번째 단계는 라이브러리 자체에서 종속성 추적을 활성화하는 것입니다. 이렇게 하려면 라이브러리에 대한 정보를 저장하도록 qmake에 지시해야 합니다:
CONFIG += create_prl
이는 lib
템플릿에만 해당되며 다른 모든 템플릿은 무시됩니다. 이 옵션을 활성화하면 qmake는 라이브러리에 대한 일부 메타 정보를 저장하는 .prl로 끝나는 파일을 만듭니다. 이 메타파일은 일반 프로젝트 파일과 비슷하지만 내부 변수 선언만 포함되어 있습니다. 이 라이브러리를 설치할 때 INSTALLS 선언에서 대상으로 지정하면 qmake가 자동으로 .prl 파일을 설치 경로에 복사합니다.
이 프로세스의 두 번째 단계는 정적 라이브러리를 사용하는 응용 프로그램에서 이 메타 정보를 읽을 수 있도록 활성화하는 것입니다:
CONFIG += link_prl
이 옵션을 활성화하면 qmake는 애플리케이션이 링크한 모든 라이브러리를 처리하고 메타 정보를 찾습니다. qmake는 이를 사용하여 관련 링크 정보를 결정하고, 특히 애플리케이션 프로젝트 파일의 DEFINES 및 LIBS 목록에 값을 추가합니다. 이 파일을 처리한 qmake는 LIBS
변수에서 새로 도입된 라이브러리를 살펴보고 종속된 .prl 파일을 찾아 모든 라이브러리가 해결될 때까지 계속합니다. 이 시점에서 메이크파일은 평소와 같이 생성되고 라이브러리는 애플리케이션에 대해 명시적으로 링크됩니다.
.prl 파일은 플랫폼 종속 정보를 포함할 수 있으므로 qmake로만 만들어야 하며 운영 체제 간에 전송해서는 안 됩니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.