Qt 프로젝트가 있고 소스 트리 외부에 컴파일 파일을 출력하고 싶습니다.
현재 다음과 같은 디렉토리 구조가 있습니다.
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
구성 (디버그 / 릴리스)에 따라 빌드 / 디버그 또는 빌드 / 릴리스 디렉토리 아래의 빌드 디렉토리에 결과 파일을 출력하고 싶습니다.
.pro 파일을 사용하여 어떻게 할 수 있습니까?
답변
짧은 대답은 : 당신은하지 않습니다 .
빌드하려는 빌드 디렉토리에서 qmake
다음을 실행해야합니다 make
. 따라서 debug
디렉토리에서 한 번 , 디렉토리에서 한 번 실행하십시오 release
.
이것이 바로 프로젝트를 빌드하는 모든 사람이 작업을 기대하는 방식이며, Qt 자체가 빌드를 위해 설정되는 방식이며, Qt Creator가 .pro
파일이 작동 할 것으로 예상하는 방식이기도합니다. 파일이 시작된 qmake
다음 make
대상이 선택한 구성을위한 빌드 폴더에 있습니다.
이러한 폴더를 생성하고 그 안에 두 개 (또는 그 이상)의 빌드를 수행하려면, qmake를 통해 최상위 프로젝트 파일에서 생성 된 최상위 makefile이 필요합니다.
빌드 구성이 두 개 이상인 것은 드문 일이 아니므로 빌드와 릴리스를 구분하는 데 불필요하게 헌신하고 있습니다. 최적화 수준이 다른 빌드가있을 수 있습니다 . 디버그 / 릴리스 이분법은 편히 쉬는 것이 가장 좋습니다.
답변
내 Qt 프로젝트의 경우 * .pro 파일에서이 체계를 사용합니다.
HEADERS += src/dialogs.h
SOURCES += src/main.cpp \
src/dialogs.cpp
Release:DESTDIR = release
Release:OBJECTS_DIR = release/.obj
Release:MOC_DIR = release/.moc
Release:RCC_DIR = release/.rcc
Release:UI_DIR = release/.ui
Debug:DESTDIR = debug
Debug:OBJECTS_DIR = debug/.obj
Debug:MOC_DIR = debug/.moc
Debug:RCC_DIR = debug/.rcc
Debug:UI_DIR = debug/.ui
간단하지만 멋지다! 🙂
답변
대상 dll / exe의 디렉토리를 변경하려면 pro 파일에서 다음을 사용하십시오.
CONFIG(debug, debug|release) {
DESTDIR = build/debug
} else {
DESTDIR = build/release
}
또한 오브젝트 파일 및 moc 파일과 같은 다른 빌드 대상에 대한 디렉토리를 변경할 수도 있습니다 ( 자세한 내용은 qmake 변수 참조 또는 qmake CONFIG () 함수 참조 ).
답변
더 간결한 접근 방식이 있습니다.
release: DESTDIR = build/release
debug: DESTDIR = build/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
답변
이를 수행하는 올바른 방법은 다음과 같습니다 (QT 지원 팀에 감사드립니다).
CONFIG(debug, debug|release) {
DESTDIR = build/debug
}
CONFIG(release, debug|release) {
DESTDIR = build/release
}
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.u
답변
나는 chalup이 제안한 것과 같은 방법을 사용합니다.
ParentDirectory = <your directory>
RCC_DIR = "$$ParentDirectory\Build\RCCFiles"
UI_DIR = "$$ParentDirectory\Build\UICFiles"
MOC_DIR = "$$ParentDirectory\Build\MOCFiles"
OBJECTS_DIR = "$$ParentDirectory\Build\ObjFiles"
CONFIG(debug, debug|release) {
DESTDIR = "$$ParentDirectory\debug"
}
CONFIG(release, debug|release) {
DESTDIR = "$$ParentDirectory\release"
}
답변
오래된 질문이지만 여전히 최신 답변의 가치가 있습니다. 오늘날에는 섀도우 빌드를 사용할 때 Qt Creator가 수행하는 작업을 수행하는 것이 일반적입니다 (새 프로젝트를 열 때 기본적으로 활성화 됨).
각 빌드 대상 및 유형에 대해 권한 qmake
은 다른 빌드 디렉토리에서 올바른 인수로 실행됩니다. 그런 다음 간단한 make
.
따라서 가상의 디렉토리 구조는 다음과 같습니다.
/
|_/build-mylib-qt5-mingw32-debug
|_/build-mylib-qt5-mingw32-release
|_/build-mylib-qt4-msvc2010-debug
|_/build-mylib-qt4-msvc2010-release
|_/build-mylib-qt5-arm-debug
|_/build-mylib-qt5-arm-release
|_/mylib
|_/include
|_/src
|_/resources
그리고 중요한 것은 a qmake
가 빌드 디렉토리에서 실행 된다는 것입니다 .
cd build-mylib-XXXX
/path/to/right/qmake ../mylib/mylib.pro CONFIG+=buildtype ...
그런 다음 빌드 디렉토리에 메이크 파일을 생성 한 다음 그 make
아래에 파일도 생성합니다. qmake가 소스 디렉토리에서 실행되지 않는 한 서로 다른 버전이 뒤섞 일 위험이 없습니다 (그렇다면 잘 정리하는 것이 좋습니다!).
그리고 이렇게하면 .pro
현재 승인 된 답변 의 파일이 더 간단 해집니다.
HEADERS += src/dialogs.h
SOURCES += src/main.cpp \
src/dialogs.cpp