creator - qt gui
Cómo especificar diferentes directorios de salida Debug/Release en el archivo QMake.pro (9)
La forma correcta de hacerlo es la siguiente (gracias Equipo de soporte de 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
Más información aquí: https://wiki.qt.io/Qt_project_org_faq#What_does_the_syntax_CONFIG.28debug.2Cdebug.7Crelease.29_mean_.3F_What_does_the_1st_argument_specify_and_similarly_what_is_the_2nd_.3F
Tengo un proyecto Qt y me gustaría generar archivos de compilación fuera del árbol de fuentes.
Actualmente tengo la siguiente estructura de directorio:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
Dependiendo de la configuración (depuración / versión), me gustaría dar salida a los archivos resultantes dentro del directorio de compilación en los directorios build / debug o build / release.
¿Cómo puedo hacer eso usando un archivo .pro?
La nueva versión de Qt Creator también tiene una opción de compilación de "perfil" entre la depuración y la versión. Así es como estoy detectando eso:
CONFIG(debug, debug|release) { DEFINES += DEBUG_MODE }
else:CONFIG(force_debug_info) { DEFINES += PROFILE_MODE }
else { DEFINES += RELEASE_MODE }
La respuesta corta es: no lo haces .
Debe ejecutar qmake
seguido de make
en el directorio de compilación en el que desee compilar. Por lo tanto, ejecútelo una vez en un directorio de debug
, una vez en un directorio de release
.
Así es como cualquiera que construya su proyecto esperaría que funcione, y así es como Qt está configurado para construir, así es también como Qt Creator espera que su archivo .pro
comporte: simplemente comienza qmake
y luego lo make
en la carpeta de compilación para su objetivo configuración elegida.
Si desea crear estas carpetas y realizar las dos (o más) compilaciones en ellas, necesitará un archivo MAKE de primer nivel, posiblemente creado a partir de un archivo de proyecto de nivel superior a través de qmake.
No es raro tener más de dos configuraciones de compilación, por lo que te comprometes innecesariamente a diferenciar solo entre una compilación y una versión; es posible que tenga compilaciones con diferentes niveles de optimización, etc. La dicotomía de depuración / liberación es mejor dejarla descansar en paz.
Para cambiar el directorio de destino dll / exe, use esto en su archivo pro:
CONFIG(debug, debug|release) {
DESTDIR = build/debug
} else {
DESTDIR = build/release
}
También es posible que desee cambiar directorios para otros objetivos de compilación como archivos de objeto y archivos moc (consulte la referencia de la variable qmake para obtener más información o la referencia de función de qmake CONFIG () ).
Para mi proyecto Qt, utilizo este esquema en el archivo * .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
¡Es simple, pero agradable! :)
Pregunta anterior, pero aún merece una respuesta actualizada. Hoy es común hacer lo que hace Qt Creator cuando se usan compilaciones de sombreados (están habilitadas por defecto al abrir un nuevo proyecto).
Para cada destino y tipo de compilación diferente, el qmake
correcto se ejecuta con los argumentos correctos en un directorio de compilación diferente. Entonces eso solo se construye con una make
simple.
Entonces, la estructura de directorios imaginarios podría verse así.
/
|_/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
Y lo más importante es que un qmake
se ejecuta en el directorio de compilación:
cd build-mylib-XXXX
/path/to/right/qmake ../mylib/mylib.pro CONFIG+=buildtype ...
Luego genera makefiles en el directorio de construcción, y luego make
generará archivos debajo de él también. No hay riesgo de que se mezclen versiones diferentes, siempre y cuando qmake nunca se ejecute en el directorio de origen (si es así, mejor ¡límpielo bien!).
Y cuando se hace así, el archivo .pro
de la respuesta actualmente aceptada es aún más simple:
HEADERS += src/dialogs.h
SOURCES += src/main.cpp /
src/dialogs.cpp
También es útil tener un nombre ligeramente diferente para el ejecutable de salida. No puedes usar algo como:
release: Target = ProgramName
debug: Target = ProgramName_d
Por qué no funciona no está claro, pero no es así. Pero:
CONFIG(debug, debug|release) {
TARGET = ProgramName
} else {
TARGET = ProgramName_d
}
Esto funciona siempre que la línea CONFIG +=
preceda.
Tengo un enfoque más compacto:
release: DESTDIR = build/release
debug: DESTDIR = build/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Uso el mismo método sugerido por 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"
}