테스트 함수
테스트 함수는 범위의 조건부 부분에서 검사할 수 있는 부울 값을 반환합니다. 테스트 함수는 내장 함수와 함수 라이브러리로 나눌 수 있습니다.
‘대체 함수’ 항목도 참조하십시오.
내장 테스트 함수
기본 테스트 함수는 내장 함수로 구현됩니다.
cache(변수명, [set|add|sub] [transient] [super|stash], [소스 변수명])
이 함수는 일반적으로 사용할 필요가 없는 내부 함수입니다.
이 함수는 Qt 5.0에서 도입되었습니다.
CONFIG(config)
이 함수는 CONFIG 변수에 설정된 변수를 테스트하는 데 사용할 수 있습니다. 이는 scopes와 동일하지만, 활성 구성을 테스트하기 위해 두 번째 매개변수를 전달할 수 있다는 장점이 있습니다. CONFIG 변수에서는 값의 순서가 중요하기 때문에(즉, 상호 배타적인 값의 경우 마지막으로 설정된 값이 활성 구성으로 간주됨), 두 번째 매개변수를 사용하여 고려할 값의 집합을 지정할 수 있습니다. 예를 들어:
CONFIG = debug
CONFIG += release
CONFIG(release, debug|release):message(Release build!) #will print
CONFIG(debug, debug|release):message(Debug build!) #no print'release'가 (기능 구문 분석에 있어) 활성 설정으로 간주되므로, 빌드 파일을 생성하는 데 사용되는 CONFIG가 됩니다. 일반적인 경우에는 두 번째 매개변수가 필요하지 않지만, 특정 상호 배타적 테스트를 수행할 때는 매우 유용합니다.
contains(변수명, 값)
변수 variablename 에 값 value 이 포함되어 있으면 성공하고, 그렇지 않으면 실패합니다. 매개변수 value에 정규식을 지정할 수 있습니다.
스코프를 사용하여 이 함수의 반환 값을 확인할 수 있습니다.
예를 들어:
contains( drivers, network ) {
# drivers contains 'network'
message( "Configuring for network build..." )
HEADERS += network.h
SOURCES += network.cpp
}drivers 변수에 network 값이 포함된 경우에만 스코프의 내용이 처리됩니다. 이 경우, 해당 파일들이 SOURCES 및 HEADERS 변수에 추가됩니다.
count(변수명, 숫자)
variablename 변수에 지정된 개수( number )의 값이 포함된 목록이 있을 경우 성공하고, 그렇지 않으면 실패합니다.
이 함수는 변수가 올바른 개수의 값을 포함하는 경우에만 해당 범위 내의 선언이 처리되도록 보장하는 데 사용됩니다. 예를 들어:
options = $$find(CONFIG, "debug") $$find(CONFIG, "release")
count(options, 2) {
message(Both release and debug specified.)
}debug(level, message)
qmake가 지정된 디버그 수준(debug level)에서 실행되는지 확인합니다. 그렇다면 true를 반환하고 디버그 메시지를 출력합니다.
defined(name[, type])
함수 또는 변수 name 가 정의되어 있는지 검사합니다. type 가 생략되면 모든 함수를 검사합니다. 변수만 또는 특정 유형의 함수만 검사하려면 type 를 지정하십시오. 다음 값을 가질 수 있습니다:
test테스트 함수만 확인합니다replacetest 함수만 검사var변수만 검사
equals(변수명, 값)
variablename 가 문자열 value 과 동일한지 여부를 테스트합니다.
예:
TARGET = helloworld
equals(TARGET, "helloworld") {
message("The target assignment was successful.")
}error(string)
이 함수는 절대 값을 반환하지 않습니다. qmake는 string 을 오류 메시지로 사용자에게 표시한 후 종료됩니다. 이 함수는 복구 불가능한 오류에 대해서만 사용해야 합니다.
예:
error(An error has occurred in the configuration process.)eval(string)
qmake 구문 규칙을 사용하여 문자열의 내용을 평가하고 true를 반환합니다. 문자열 내에서 정의 및 할당을 사용하여 기존 변수의 값을 수정하거나 새로운 정의를 생성할 수 있습니다.
예:
eval(TARGET = myapp) {
message($$TARGET)
}참고: 따옴표를 사용하여 문자열을 구분할 수 있으며, 반환 값이 필요하지 않은 경우 이를 무시할 수 있습니다.
exists(filename)
지정된 ` filename `을 가진 파일이 존재하는지 검사합니다. 파일이 존재하면 함수는 성공하고, 그렇지 않으면 실패합니다.
filename 인자에는 와일드카드가 포함될 수 있습니다. 이 경우, 일치하는 파일이 하나라도 있으면 이 함수는 성공합니다.
예:
exists( $(QTDIR)/lib/libqt-mt* ) {
message( "Configuring for multi-threaded Qt..." )
CONFIG += thread
}참고: 사용 중인 플랫폼에 관계없이 디렉터리 구분자로" /"를 사용해야 합니다.
export(변수명)
variablename 의 현재 값을 함수의 로컬 컨텍스트에서 전역 컨텍스트로 내보냅니다.
for(iterate, list)
list 에 포함된 모든 값을 순차적으로 처리하는 루프를 시작하며, 각 값을 차례로 iterate 에 할당합니다. 편의상, list 가 1..10인 경우 iterate는 1부터 10까지의 값을 순차적으로 처리합니다.
예를 들어:
LIST = 1 2 3
for(a, LIST):exists(file.$${a}):message(I see a file.$${a}!)break() 을 사용하여 루프를 중단할 수 있습니다. next() 문은 루프 본문의 나머지 부분을 건너뛰고 다음 반복부터 실행을 계속합니다.
greaterThan(변수명, 값)
variablename 의 값이 value 보다 큰지 검사합니다. 먼저 이 함수는 수치 비교를 시도합니다. 피연산자 중 하나라도 변환에 실패하면, 이 함수는 문자열 비교를 수행합니다.
예를 들어:
ANSWER = 42
greaterThan(ANSWER, 1) {
message("The answer might be correct.")
}두 숫자를 문자열로 직접 비교하는 것은 불가능합니다. 이를 해결하기 위해, 숫자가 아닌 접두사가 붙은 임시 값을 생성하여 이를 비교합니다.
예를 들어:
VALUE = 123
TMP_VALUE = x$$VALUE
greaterThan(TMP_VALUE, x456): message("Condition may be true.")lessThan()도 참조하십시오.
if(condition)
condition 을 평가합니다. 부울 표현식을 묶는 데 사용됩니다.
예:
if(linux-g++*|macx-g++*):CONFIG(debug, debug|release) {
message("We are on Linux or Mac OS, and we are in debug mode.")
}include(filename)
filename 로 지정된 파일의 내용을 포함된 지점에서 현재 프로젝트에 포함시킵니다. 이 함수는 filename 가 포함되어 있으면 성공하고, 그렇지 않으면 실패합니다. 포함된 파일은 즉시 처리됩니다.
이 함수를 스코프의 조건으로 사용하여 파일이 포함되었는지 확인할 수 있습니다. 예:
include( shared.pri )
OPTIONS = standard custom
!include( options.pri ) {
message( "No custom build options specified" )
OPTIONS -= custom
}infile(filename, var, val)
filename 파일이 (qmake 자체에 의해 파싱되었을 때) var 변수를 포함하고 있으며 그 값이 val 인 경우 성공하고, 그렇지 않으면 실패합니다. val 을 지정하지 않으면, 이 함수는 해당 파일에 var 가 할당되었는지 여부를 검사합니다.
isActiveConfig
이 함수는 ` CONFIG ` 함수의 별칭입니다.
isEmpty(변수명)
변수 variablename 이 비어 있으면 성공하고, 그렇지 않으면 실패합니다. 이는 count( variablename, 0 ) 과 동일합니다.
예를 들어:
isEmpty( CONFIG ) {
CONFIG += warn_on debug
}isEqual
이는 equals 함수의 별칭입니다.
lessThan(변수명, 값)
variablename 의 값이 value 보다 작은지 검사합니다. greaterThan()과 동일하게 작동합니다.
예를 들어:
ANSWER = 42
lessThan(ANSWER, 1) {
message("The answer might be wrong.")
}load(feature)
feature 로 지정된 피처 파일(.prf)을, 해당 피처가 이미 로드된 경우가 아니면 로드합니다.
log(message)
콘솔에 메시지를 출력합니다. message 함수와 달리, 텍스트를 앞에 추가하지도 않고 줄 바꿈을 뒤에 추가하지도 않습니다.
이 함수는 Qt 5.0에서 도입되었습니다.
message()도 참조하십시오.
message(string)
항상 성공하며, 사용자에게 일반 메시지로 ` string `를 표시합니다. ` error() ` 함수와 달리, 이 함수는 처리를 계속 진행할 수 있게 합니다.
message( "This is a message" )위의 줄은 콘솔에 "This is a message"를 출력합니다. 따옴표 사용은 선택 사항이지만, 사용하는 것이 좋습니다.
참고: 기본적으로 메시지는 특정 프로젝트에 대해 qmake가 생성한 각 Makefile마다 출력됩니다. 프로젝트당 메시지가 한 번만 표시되도록 하려면, 빌드 중에 메시지를 필터링하기 위해 build_pass 변수를 범위(scope)와 함께 테스트하십시오. 예를 들어:
!build_pass:message( "This is a message" )mkpath(dirPath)
dirPath 디렉터리 경로를 생성합니다. 이 함수는 QDir::mkpath 함수를 래핑한 것입니다.
이 함수는 Qt 5.0에서 도입되었습니다.
requires(condition)
condition 을 평가합니다. 조건이 false인 경우, qmake는 빌드 시 이 프로젝트(및 해당 SUBDIRS)를 건너뜁니다.
참고: 이 목적을 위해 REQUIRES 변수를 사용할 수도있습니다 . 그러나 대신 이 함수를 사용하는 것이 좋습니다.
system(command)
지정된 command 을 보조 셸에서 실행합니다. 명령이 종료 상태 코드 0을 반환하면 성공하고, 그렇지 않으면 실패합니다. 스코프를 사용하여 이 함수의 반환 값을 확인할 수 있습니다.
예:
system("ls /bin"): HAS_BIN = TRUEsystem()의 replace 변형도 참조하십시오.
touch(filename, reference_filename)
filename 의 타임스탬프를 reference_filename 의 타임스탬프와 일치하도록 업데이트합니다.
이 함수는 Qt 5.0에서 도입되었습니다.
unset(변수명)
variablename 을 현재 컨텍스트에서 제거합니다.
예:
NARF = zort
unset(NARF)
!defined(NARF, var) {
message("NARF is not defined.")
}versionAtLeast(변수명, 버전번호)
variablename 의 버전 번호가 versionNumber 이상인지 테스트합니다. 버전 번호는 '.'로 구분된 비음수 십진수 시퀀스로 간주되며, 문자열의 숫자가 아닌 끝부분은 무시됩니다. 비교는 왼쪽에서 오른쪽으로 구간 단위로 수행되며, 한 버전이 다른 버전의 접두사인 경우 더 작은 것으로 간주됩니다.
이 함수는 Qt 5.10에서 도입되었습니다.
versionAtMost(변수명, 버전번호)
variablename 의 버전 번호가 versionNumber 보다 작거나 같은지 테스트합니다. versionAtLeast()와 동일하게 작동합니다.
이 함수는 Qt 5.10에서 도입되었습니다.
warning(string)
항상 성공하며, string 을 경고 메시지로 사용자에게 표시합니다.
write_file(filename, [variablename, [mode]])
variablename 의 값을 filename 라는 이름의 파일에 각 값을 별도의 줄에 하나씩 기록합니다. variablename 이 지정되지 않으면 빈 파일을 생성합니다. mode 이 append 이고 파일이 이미 존재하는 경우, 파일을 덮어쓰지 않고 끝에 추가합니다.
이 함수는 Qt 5.0에서 도입되었습니다.
테스트 함수 라이브러리
복잡한 테스트 함수는 .prf 파일로 구성된 라이브러리에 구현되어 있습니다.
packagesExist(packages)
PKGCONFIG 메커니즘을 사용하여 프로젝트 파싱 시점에 주어진 패키지가 존재하는지 여부를 판단합니다.
이는 기능을 선택적으로 활성화하거나 비활성화하는 데 유용할 수 있습니다. 예를 들어:
packagesExist(sqlite3 QtNetwork QtDeclarative) {
DEFINES += USE_FANCY_UI
}그리고 코드에서는 다음과 같이 사용합니다:
#ifdef USE_FANCY_UI
// Use the fancy UI, as we have extra packages available
#endifprepareRecursiveTarget(target)
install 타깃과 유사하게, 모든 하위 디렉터리를 순회하는 타깃을 준비함으로써 프로젝트 전체에 적용되는 타깃 생성을 용이하게 합니다. 예를 들어:
TEMPLATE = subdirs
SUBDIRS = one two three
prepareRecursiveTarget(check).CONFIG 파일에 have_no_default 또는 no_<target>_target 가 지정된 하위 디렉터리는 이 타깃에서 제외됩니다:
two.CONFIG += no_check_target준비된 타깃을 QMAKE_EXTRA_TARGETS에 수동으로 추가해야 합니다:
QMAKE_EXTRA_TARGETS += check이 타깃을 전역적으로 사용하려면 위의 코드를 모든 하위 디렉터리(subdirs) 하위 프로젝트에 포함시켜야 합니다. 또한, 이러한 타깃이 실제로 작동하려면 하위 디렉터리가 아닌(non-subdirs) 하위 프로젝트에도 해당 코드를 포함시켜야 합니다. 이를 구현하는 가장 쉬운 방법은 사용자 정의 기능(feature) 파일을 만드는 것입니다. 예를 들어:
# <project root>/features/mycheck.prf
equals(TEMPLATE, subdirs) {
prepareRecursiveTarget(check)
} else {
check.commands = echo hello user
}
QMAKE_EXTRA_TARGETS += check이 기능 파일은 .qmake.conf 등을 통해 각 하위 프로젝트에 삽입되어야 합니다:
# <project root>/.qmake.conf
CONFIG += mycheck이 기능은 Qt 5.0에서 도입되었습니다.
qtCompileTest(test)
테스트 프로젝트를 빌드합니다. 테스트가 통과하면 true를 반환하고 CONFIG 변수에 ` config_<test> `를 추가합니다. 그렇지 않으면 false를 반환합니다.
이 함수를 사용하려면 해당 피처 파일을 불러와야 합니다:
# <project root>/project.pro
load(configure)이렇게 하면 QMAKE_CONFIG_TESTS_DIR 변수가 프로젝트 상위 디렉터리의 config.tests 하위 디렉터리로 설정됩니다. 기능 파일을 로드한 후 이 값을 재정의할 수 있습니다.
tests 디렉터리 내에는 각 테스트마다 간단한 qmake 프로젝트가 포함된 하위 디렉터리가 하나씩 있어야 합니다. 다음 코드 조각은 프로젝트의 .pro 파일을 보여줍니다:
# <project root>/config.tests/test/test.pro
SOURCES = main.cpp
LIBS += -ltheFeature
# Note that the test project is built without Qt by default.다음 코드 조각은 프로젝트의 메인 .cpp 파일을 보여줍니다:
// <project root>/config.tests/test/main.cpp
#include <TheFeature/MainHeader.h>
int main() { return featureFunction(); }다음 코드 조각은 테스트 호출 방법을 보여줍니다:
# <project root>/project.pro
qtCompileTest(test)테스트 프로젝트가 성공적으로 빌드되면 테스트가 통과된 것입니다.
테스트 결과는 자동으로 캐시되며, 이를 통해 모든 하위 프로젝트에서도 해당 결과를 사용할 수 있습니다. 따라서 최상위 프로젝트 파일에서 모든 구성 테스트를 실행하는 것이 권장됩니다.
캐시된 결과의 재사용을 억제하려면 qmake에 ` CONFIG+=recheck `를 전달하십시오.
load()도 참조하십시오.
이 함수는 Qt 5.0에서 도입되었습니다.
qtHaveModule(name)
name 로 지정된 Qt 모듈이 있는지 확인합니다. 가능한 값의 목록은 QT를 참조하십시오.
이 함수는 Qt 5.0.1에서 도입되었습니다.
© 2026 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.