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 / liberación), me gustaría generar los archivos resultantes dentro del directorio de compilación en los directorios de compilación / depuración o compilación / liberación.
¿Cómo puedo hacer eso usando un archivo .pro?
Respuestas:
La respuesta corta es: no es así .
Debe ejecutar
qmake
seguido demake
en cualquier directorio de compilación en el que desee compilar. Por lo tanto, ejecútelo una vez en undebug
directorio, una vez en unrelease
directorio.Así es como cualquiera que construya su proyecto esperaría que funcione, y así es como Qt está configurado para compilar, así es como Qt Creator espera
.pro
que se comporte su archivo: simplemente comienzaqmake
y luegomake
en la carpeta de compilación para la configuración elegida por su objetivo.Si desea crear estas carpetas y realizar las dos (o más) compilaciones en ellas, necesitará un archivo MAKE de nivel superior, 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 se está comprometiendo innecesariamente a diferenciar únicamente entre una compilación y una versión; puede tener compilaciones con diferentes niveles de optimización, etc. Es mejor dejar en paz la dicotomía depuración / liberación.
fuente
Para mi proyecto Qt, utilizo este esquema en el archivo * .pro:
¡Es simple, pero agradable! :)
fuente
DESTDIR
s condicionalmente, y luego utilizar ese valor en todos los otros caminos:OBJECTS_DIR = $${DESTDIR}/.obj
. ¡Salud!Debug
adebug
yRelease
arelease
.Para cambiar el directorio de destino dll / exe, use esto en su archivo profesional:
Es posible que también desee cambiar directorios para otros destinos de compilación como archivos objeto y archivos moc (consulte la referencia de la variable qmake para obtener más detalles o la referencia de la función qmake CONFIG () ).
fuente
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
resulta para resolver algunos problemas de usorelease:
ydebug:
Tengo un enfoque más compacto:
fuente
La forma correcta de hacerlo es la siguiente (gracias al equipo de soporte de QT):
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_whatnd_is_the_
fuente
Utilizo el mismo método sugerido por chalup,
fuente
Pregunta antigua, pero aún así vale la pena una respuesta actualizada. Hoy en día es común hacer lo que hace Qt Creator cuando se utilizan compilaciones de sombra (están habilitadas de forma predeterminada al abrir un nuevo proyecto).
Para cada destino y tipo de compilación diferente, el derecho
qmake
se ejecuta con los argumentos correctos en un directorio de compilación diferente. Entonces eso solo se construye con simplemake
.Entonces, la estructura de directorio imaginaria podría verse así.
Y lo importante es que
qmake
se ejecuta a en el directorio de compilación:Luego genera archivos MAKE en el directorio de compilación, y luego
make
genera archivos también generará archivos debajo de él. No hay riesgo de que se mezclen diferentes versiones, 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
.pro
archivo de la respuesta actualmente aceptada es aún más simple:fuente
$(OUT_PWD)
sea la solución?mylib
? Me gustaría si hubiera una forma "elegante" de hacer esto, no veo otra forma que no sea usar las técnicas de las otras respuestas: use el tipo de compilación y la configuración para completarLIBS
de una manera inteligente, anulando la ventaja de la construcción de sombra.include(../mylib/mylib.pri)
También es útil tener un nombre ligeramente diferente para el ejecutable de salida. No puedes usar algo como:
No está claro por qué no funciona, pero no es así. Pero:
Esto funciona siempre que la
CONFIG +=
línea lo preceda.fuente
La nueva versión de Qt Creator también tiene una opción de construcción de "perfil" entre depuración y publicación. Así es como lo estoy detectando:
fuente
1. Busque depuración / liberación en CONFIG
Obtenga la versión actual (depuración |).
(Puede ser múltiple, así que mantén solo el último especificado en la compilación):
2. Configure DESTDIR
Úselo tiene el nombre del subdirectorio de compilación
fuente
Este es mi Makefile para diferentes directorios de salida de depuración / liberación. Este Makefile se probó con éxito en Ubuntu linux. Debería funcionar sin problemas en Windows siempre que Mingw-w64 esté instalado correctamente.
fuente