precio - que es qt creator
¿Cómo agregar banderas específicas a moc en un proyecto de qmake? (7)
Ver por ejemplo los documentos de Qmake para variables que detallan
diez variables diferentes en el patrón
QMAKE_CFLAGS_*
, ydiez variables diferentes en el patrón
QMAKE_CXXFLAGS*
y por lo tanto, comenzaría con QMAKE_CXXFLAGS
que está documentado como:
QMAKE_CXXFLAGS
Esta variable contiene los indicadores del compilador C ++ que se utilizan al construir un proyecto. El valor de esta variable normalmente se maneja con qmake o qmake.conf y rara vez necesita modificarse. Los indicadores específicos para los modos de depuración y liberación se pueden ajustar modificando las variables
QMAKE_CXXFLAGS_DEBUG
yQMAKE_CXXFLAGS_RELEASE
, respectivamente. Nota: en la plataforma Symbian, esta variable se puede usar para pasar opciones específicas de arquitectura a cada compilador en el sistema de compilación Symbian. Por ejemplo:
QMAKE_CXXFLAGS.CW += -O2 QMAKE_CXXFLAGS.ARMCC += -O0
Para obtener más información, consulte Notas de plataforma de qmake.
Así que comenzaría con
QMAKE_CXXFLAGS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
que puedes agregar a tu archivo .pro
.
Recopilo un ejecutable Qt usando qmake && make
en el siguiente archivo project.pro
:
INCLUDEPATH *= ../../dependencies/boost
QT *= opengl xml
CONFIG *= qt opengl static
TARGET = myexe
HEADERS = Viewer.hpp MainWindow.hpp Inspector.hpp
SOURCES = main.cpp Viewer.cpp MainWindow.cpp Inspector.cpp
Sin embargo, al compilar, moc
asfixia en una macro impulso que no puede analizar. Para evitar este error , necesito pasar el indicador -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
a -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
, pero no puedo hacerlo.
¿Cómo edito mi archivo .pro
para pasar una determinada bandera a moc
? (pero no a g++
, como QMAKE_CXXFLAGS
hace QMAKE_CXXFLAGS
)
Un poco hackish, pero ¿qué pasa si sobrescribe el compilador de moc para que incluya la bandera. En el .pro:
QMAKE_MOC = $$QMAKE_MOC -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
Hay una actualización de este problema para impulsar 1.53, vea la última publicación aquí :
Necesitamos agregar -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
también.
En caso de que esté haciendo Ogre3D (OGRE 1.8.1 SDK para Visual C ++ .Net 2010 (32 bits)), utilice QT5 32 bits en lugar de la versión QT5 de 64 bits, pasará.
También considera esto:
#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
Creo que ha sido compilado (boost incluido) con 32 bits, así que supongo que tengo que tomar src y recompilar (usando mi 64bit), pero esa es otra historia en la que no voy por ahora desde OGRE 1.9 RC 1 SDK para Visual C ++ .Net 2012 ( 64-bit) pronto será lanzado en la versión estable.
Saludos
EDIT 1:
Descargué Qt libraries 4.8.4 para Windows y configuré mi creador de QT (el que viene con QT5 completo y adivina qué ... .Ogre3D funciona como un amuleto cuando se compila en 4.8.4.
Qt 5.0.2 for Windows 32-bit (VS 2010, 485 MB)
Qt libraries 4.8.4 for Windows (VS 2010, 234 MB)
OGRE 1.8.1 SDK for Visual C++ .Net 2010 (32-bit)
También lo mencioné para quién está interesado aquí: http://qt-project.org/forums/viewreply/128660/
Para agregar indicadores específicos a moc en un proyecto qmake (qt5.2) necesita:
load(moc)
QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE
La mejor manera que encontré para hacer esto se basa en un comentario sobre la solución aceptada de David Faure:
QMAKE_MOC_OPTIONS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
Los otros métodos propuestos que implican load(moc)
y manipulan la variable QMAKE_MOC
tienen un desafortunado efecto secundario: evitan que qmake agregue automáticamente variables INCLUDEPATH
(y tal vez otras) que normalmente estarían en la línea de comandos de INCLUDEPATH
, si INCLUDEPATH
está configurado después la llamada a load(moc)
.
Este enfoque se compone más fácilmente si tiene su configuración de qmake dividida en varios archivos; no es necesario que se asegure de que el cambio a la línea de comando INCLUDEPATH
se INCLUDEPATH
después de que se INCLUDEPATH
todos los directorios INCLUDEPATH
.
En mi código en los archivos de encabezado solo tengo:
#ifndef Q_MOC_RUN
//Here we include Boost or Ogre headers with Macro
#endif
Funciona perfectamente en Qt5 x64 y no necesita recompilar nada.