qt download - Cómo especificar diferentes directorios de salida Debug / Release en el archivo QMake .pro





creator precio (9)


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 }

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 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.




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






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 () ).




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.




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"
}



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! :)




Después de la comparación entre las dos soluciones, parece que:

myLayout.setAlignment(Qt.AlignTop)

funciona para varias alineaciones de widgets pero:

myLayout.setAlignment(myWidget, Qt.AlignTop)

funciona solo para el primer widget que agrega al diseño. Después de todo, la solución también depende de la QSizePolicy de sus widgets.





qt qmake