Qtプロジェクトがあり、ソースツリーの外部にコンパイルファイルを出力したい。
現在、次のディレクトリ構造があります。
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
構成(デバッグ/リリース)に応じて、結果のファイルをbuild/debugまたはbuild/releaseディレクトリの下のbuildディレクトリ内に出力します。
.proファイルを使用してこれを行うにはどうすればよいですか?
私の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のディレクトリを変更するには、プロファイルでこれを使用します。
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
そして重要なことは、qmake
がビルドディレクトリで実行されることです。
cd build-mylib-XXXX
/path/to/right/qmake ../mylib/mylib.pro CONFIG+=buildtype ...
次に、ビルドディレクトリにmakefileを生成し、make
はその下にファイルも生成します。 qmakeがソースディレクトリで実行されない限り、異なるバージョンが混在するリスクはありません(実行されている場合は、適切にクリーンアップしてください!)。
そして、このようにすると、現在受け入れられている回答の.pro
ファイルはさらにシンプルになります。
HEADERS += src/dialogs.h
SOURCES += src/main.cpp \
src/dialogs.cpp
また、出力実行可能ファイルに少し異なる名前を付けると便利です。次のようなものは使用できません。
release: Target = ProgramName
debug: Target = ProgramName_d
なぜ機能しないのかは明らかではありませんが、そうではありません。しかし:
CONFIG(debug, debug|release) {
TARGET = ProgramName
} else {
TARGET = ProgramName_d
}
これは、CONFIG +=
行が前にある限り機能します。
Qt Creatorの新しいバージョンには、デバッグとリリースの間に「プロファイル」ビルドオプションもあります。私はそれをどのように検出していますか:
CONFIG(debug, debug|release) { DEFINES += DEBUG_MODE }
else:CONFIG(force_debug_info) { DEFINES += PROFILE_MODE }
else { DEFINES += RELEASE_MODE }