내 문제를 설명하기 위해 빈 Qt 프로젝트를 만들었습니다. in pro 파일의이 QMake 코드를 제외하고는 프로젝트에 아무 것도 없습니다. 프로젝트/빌드 구성은 기본값입니다.Q 조건을 준수하지 않고 DEFINE에 추가합니다.
이 Qmake 코드는 항상 $$system()
함수를 실행하지만 "뒤에서"수행합니다. contains(DEFINES, anything)
이 항상 true로 평가되고 후속 코드가 실행되는 미스테리 프로세스가 있습니다. 글자 그대로 something
및 anything
을 사용한 모든 값을 사용할 수 있습니다.
CONFIG(something){ DEFINES+=anything }
contains(DEFINES, anything){
message(anything!)
stdOut=$$system(echo x > test.txt)
}
else{
message(nothing!)
}
이 실행될 때마다 (난 그냥 QtCreator에 파일을 저장하고있어 BTW을 킥오프 - qmake를 실행 NOT)이 일반 메시지가 나타납니다 :
프로젝트 MESSAGE : 아무것도!
초 후에 test.txt 파일이 프로젝트 디렉토리에 나타납니다.
파일 쓰기를 제어하기위한 조건으로 CONFIG()
을 직접 사용하면 홀수가됩니다. 또한, 해당 CONFIG()
줄을 제거하면 이런 일이 발생하지 않습니다.
신비한 백그라운드 프로세스가있는 것 같습니다. 항상 이것을 평가하고 DEFINES+=anything
을 실행 한 다음 논리가 무엇이든간에 계속 처리합니다.
프로젝트에 조건부로 소스 파일을 추가하면 파일이 컴파일되지 않은 경우에도 항상 파일 탐색 트리에 나타납니다. 이는 Qt Creator가 조건문을 무시하고 자신의 목적을 위해 QMake를 실행하는 예제입니다. 이 기능이 게임과 동일한 메커니즘입니까?