테스트 함수
테스트 함수는 범위의 조건부 부분에서 테스트할 수 있는 부울 값을 반환합니다. 테스트 함수는 내장 함수와 함수 라이브러리로 나눌 수 있습니다.
함수 바꾸기도 참조하세요.
내장 테스트 함수
기본 테스트 함수는 내장 함수로 구현됩니다.
캐시(변수명, [설정|추가|서브] [트랜지언트] [슈퍼|스태시], [소스 변수명])
이 함수는 일반적으로 필요하지 않은 내부 함수입니다.
이 함수는 Qt 5.0에 도입되었습니다.
CONFIG(config)
이 함수는 CONFIG 변수에 배치된 변수를 테스트하는 데 사용할 수 있습니다. 범위와 동일하지만 두 번째 파라미터를 전달하여 활성 구성을 테스트할 수 있다는 추가적인 이점이 있습니다. CONFIG
변수에서는 값의 순서가 중요하므로(즉, 마지막 값 세트가 상호 배타적인 값에 대한 활성 구성으로 간주됨) 두 번째 매개 변수를 사용하여 고려할 값 세트를 지정할 수 있습니다. 예를 들어
CONFIG = debug CONFIG += release CONFIG(release, debug|release):message(Release build!) #will print CONFIG(debug, debug|release):message(Debug build!) #no print
릴리스가 활성 설정(기능 구문 분석용)으로 간주되므로 빌드 파일을 생성하는 데 사용되는 CONFIG가 됩니다. 일반적인 경우 두 번째 매개변수는 필요하지 않지만, 특정 상호 배타적 테스트의 경우 매우 중요합니다.
포함(변수명, 값)
variablename
변수에 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)
variablename
변수에 지정된 number
값의 목록이 포함되어 있으면 성공하고, 그렇지 않으면 실패합니다.
이 함수는 변수에 올바른 수의 값이 포함된 경우에만 범위 내의 선언이 처리되도록 하는 데 사용됩니다. 예를 들어
options = $$find(CONFIG, "debug") $$find(CONFIG, "release") count(options, 2) { message(Both release and debug specified.) }
debug(level, message)
qmake가 지정된 디버그 수준에서 실행되는지 확인합니다. 맞으면 true를 반환하고 디버그 메시지를 출력합니다.
defined(name[, type])
함수 또는 변수 name
가 정의되었는지 테스트합니다. type
을 생략하면 모든 함수를 확인합니다. 변수 또는 특정 유형의 함수만 확인하려면 type
을 지정합니다. 다음과 같은 값을 가질 수 있습니다:
test
테스트 함수만 확인replace
대체 함수만 확인var
변수만 확인
같음(변수명, 값)
variablename
가 value
문자열과 같은지 여부를 테스트합니다.
예를 들어
TARGET = helloworld equals(TARGET, "helloworld") { message("The target assignment was successful.") }
error(문자열)
이 함수는 값을 반환하지 않습니다. qmake는 사용자에게 오류 메시지로 string
을 표시하고 종료합니다. 이 함수는 복구할 수 없는 오류에만 사용해야 합니다.
예
error(An error has occurred in the configuration process.)
eval(문자열)
qmake 구문 규칙을 사용하여 문자열의 내용을 평가하고 참을 반환합니다. 문자열에서 정의 및 할당을 사용하여 기존 변수의 값을 수정하거나 새 정의를 만들 수 있습니다.
예를 들어
eval(TARGET = myapp) { message($$TARGET) }
참고: 따옴표를 사용하여 문자열을 구분할 수 있으며, 반환값이 필요하지 않은 경우 버릴 수 있습니다.
exists(파일명)
주어진 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이면 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
을 평가합니다. 부울 표현식을 그룹화하는 데 사용됩니다.
예를 들면
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 자체에서 파싱할 때)에 값이 val
인 변수 var
가 포함되어 있으면 성공하고, 그렇지 않으면 실패합니다. 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
을 표시합니다. error()
함수와 달리 이 함수는 처리를 계속할 수 있습니다.
message( "This is a message" )
위 줄은 콘솔에 "이것은 메시지입니다"가 기록되도록 합니다. 따옴표 사용은 선택 사항이지만 권장됩니다.
참고: 기본적으로 메시지는 지정된 프로젝트에 대해 qmake가 생성한 각 메이크파일에 대해 기록됩니다. 메시지가 각 프로젝트에 대해 한 번만 표시되도록 하려면 build_pass
변수를 범위와 함께 테스트하여 빌드 중에 메시지를 필터링하세요. 예를 들어
!build_pass:message( "This is a message" )
mkpath(dirPath)
디렉터리 경로 dirPath
를 만듭니다. 이 함수는 QDir::mkpath 함수를 감싸는 래퍼입니다.
이 함수는 Qt 5.0에 도입되었습니다.
requires(condition)
condition
을 평가합니다. 조건이 거짓이면, qmake는 빌드할 때 이 프로젝트(및 해당 서브디렉토리)를 건너뜁니다.
참고: 이 용도로 REQUIRES 변수를 사용할 수도 있습니다. 그러나 대신 이 함수를 사용하는 것이 좋습니다.
system(command)
주어진 command
을 보조 셸에서 실행합니다. 명령이 0 종료 상태로 반환되면 성공하고, 그렇지 않으면 실패합니다. 이 함수의 반환 값은 스코프를 사용하여 확인할 수 있습니다.
예를 들어
system("ls /bin"): HAS_BIN = TRUE
system()의 대체 변형도 참조하세요.
touch(파일명, 참조_파일명)
filename
의 타임스탬프를 reference_filename
의 타임스탬프와 일치하도록 업데이트합니다.
이 함수는 Qt 5.0에 도입되었습니다.
unset(변수명)
현재 컨텍스트에서 variablename
을 제거합니다.
예를 들어
NARF = zort unset(NARF) !defined(NARF, var) { message("NARF is not defined.") }
versionAtLeast(variablename, versionNumber)
variablename
의 버전 번호가 versionNumber
보다 크거나 같은지 테스트합니다. 버전 번호는 '.'로 구분된 음수가 아닌 십진수의 시퀀스로 간주되며, 문자열의 숫자가 아닌 꼬리는 무시됩니다. 비교는 왼쪽에서 오른쪽으로 세그먼트 단위로 수행되며, 한 버전이 다른 버전의 접두사이면 더 작은 버전으로 간주됩니다.
이 함수는 Qt 5.10에 도입되었습니다.
versionAtMost(variablename, versionNumber)
variablename
의 버전 번호가 versionNumber
보다 작거나 같은지 테스트합니다. versionAtLeast()와 동일하게 작동합니다.
이 함수는 Qt 5.10에 도입되었습니다.
warning(문자열)
항상 성공하고 사용자에게 경고 메시지로 string
을 표시합니다.
쓰기_파일(파일명, [변수명, [모드]])
variablename
의 값을 filename
이라는 이름의 파일에 각 값을 별도의 줄에 씁니다. variablename
을 지정하지 않으면 빈 파일을 만듭니다. mode
가 append
이고 파일이 이미 존재하는 경우 파일을 대체하지 않고 추가합니다.
이 함수는 Qt 5.0에 도입되었습니다.
테스트 함수 라이브러리
복잡한 테스트 함수는 .prf 파일 라이브러리로 구현됩니다.
packagesExist(패키지가 있음)
프로젝트 파싱 시점에 주어진 패키지가 존재하는지 여부를 확인하기 위해 PKGCONFIG 메커니즘을 사용합니다.
이 함수는 선택적으로 기능을 활성화 또는 비활성화하는 데 유용할 수 있습니다. 예를 들어
packagesExist(sqlite3 QtNetwork QtDeclarative) { DEFINES += USE_FANCY_UI }
그리고 코드에서
#ifdef USE_FANCY_UI // Use the fancy UI, as we have extra packages available #endif
prepareRecursiveTarget(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
대상을 전역으로 만들려면 위의 코드를 모든 하위 디렉터리 하위 프로젝트에 포함시켜야 합니다. 또한 이 타깃이 어떤 작업을 수행하도록 하려면 서브디렉트가 아닌 하위 프로젝트에 해당 코드를 포함시켜야 합니다. 이를 위한 가장 쉬운 방법은 사용자 지정 기능 파일을 만드는 것입니다. 예를 들어
# <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_<test>
가 CONFIG 변수에 추가됩니다. 그렇지 않으면 false가 반환됩니다.
이 함수를 사용하려면 해당 기능 파일을 로드해야 합니다:
# <project root>/project.pro load(configure)
이렇게 하면 변수가 프로젝트의 상위 디렉터리의 config.tests
하위 디렉터리에 QMAKE_CONFIG_TESTS_DIR로 설정됩니다. 기능 파일을 로드한 후 이 값을 재정의할 수 있습니다.
테스트 디렉터리 안에는 테스트당 하나의 하위 디렉터리가 있어야 하며, 여기에는 간단한 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)
테스트 프로젝트가 성공적으로 빌드되면 테스트가 통과됩니다.
테스트 결과는 자동으로 캐시되어 모든 하위 프로젝트에서 사용할 수 있습니다. 따라서 최상위 프로젝트 파일에서 모든 구성 테스트를 실행하는 것이 좋습니다.
캐시된 결과의 재사용을 억제하려면 CONFIG+=recheck
을 qmake에 전달하세요.
load()도 참조하십시오.
이 함수는 Qt 5.0에 도입되었습니다.
qtHaveModule(name)
name
에 지정된 Qt 모듈이 있는지 확인합니다. 가능한 값의 목록은 QT를 참조하십시오.
이 함수는 Qt 5.0.1에 도입되었습니다.
© 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.