Как добавить определенные флаги в moc в проекте qmake? - PullRequest
8 голосов
/ 13 декабря 2011

Я компилирую исполняемый файл Qt, используя qmake && make для следующего 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

Однако, при компиляции, moc душит макрос повышения, который он не может проанализировать. Чтобы обойти эту ошибку , мне нужно передать флаг -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED в moc, но я не могу это сделать.

Как мне отредактировать мой .pro файл, чтобы передать данный флаг moc? (но не g++, как QMAKE_CXXFLAGS)

Ответы [ 7 ]

10 голосов
/ 23 декабря 2011

Немного хакерски, но что если вы перезапишите компилятор moc, чтобы он включал флаг.В .pro:

QMAKE_MOC = $$QMAKE_MOC -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
3 голосов
/ 28 августа 2013

В моем коде в заголовочных файлах у меня просто есть:

#ifndef Q_MOC_RUN
    //Here we include Boost or Ogre headers with Macro
#endif

Он отлично работает в Qt5 x64 и не нужно ничего перекомпилировать.

1 голос
/ 07 февраля 2014

Для добавления определенных флагов в moc в проекте qmake (qt5.2) необходимо:

    load(moc)
    QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE
1 голос
/ 15 марта 2013

Существует обновление для этой проблемы для Boost 1.53, см. Последнее сообщение здесь :

Нам нужно добавить -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION также.

0 голосов
/ 19 октября 2017

Лучший способ, который я нашел, основан на комментарии к принятому решению от Дэвида Фора:

QMAKE_MOC_OPTIONS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

Другие предложенные методы, которые включают load(moc) и манипулируют самой переменной QMAKE_MOC, имеют неприятный побочный эффект: они не позволяют qmake автоматически добавлять INCLUDEPATH переменные (и, возможно, другие), которые обычно находятся в командной строке moc, если INCLUDEPATH установлено после вызова load(moc).

Этот подход упрощается, если ваша конфигурация qmake разделена на несколько файлов; вам не нужно гарантировать, что изменение в командной строке moc произойдет после того, как все каталоги INCLUDEPATH установлены.

0 голосов
/ 09 июня 2013

Если вы используете Ogre3D (OGRE 1.8.1 SDK для Visual C ++ .Net 2010 (32-разрядная версия)), тогда используйте 32-разрядную версию QT5 вместо 64-разрядной версии QT5, она пройдет.

Также учтите это:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

Я думаю, что он был скомпилирован (включая boost) с 32-битной версией, поэтому я полагаю, что мне нужно взять src и перекомпилировать (используя мой 64-битный код), но это еще одна история, на которой я сейчас не остановлюсь после OGRE 1.9 RC 1 SDK для Visual C ++. Net 2012 (64-разрядная версия) скоро выйдет в стабильной версии.

Привет

РЕДАКТИРОВАТЬ 1:

Скачал библиотеки Qt 4.8.4 для Windows и настроил моего создателя QT (тот, который идет с полным QT5, и угадайте, что…. Ogre3D работает как чудо при компиляции на 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)

Я также упомянул это для тех, кто интересуется здесь: http://qt -project.org / forums / viewreply / 128660 /

0 голосов
/ 19 декабря 2011

См., Например, документы Qmake для переменных , в которых подробно

  • десять различных переменных в шаблоне QMAKE_CFLAGS_* и

  • десять различных переменных в шаблоне QMAKE_CXXFLAGS*

и, следовательно, я бы начал с QMAKE_CXXFLAGS, который задокументирован как:

QMAKE_CXXFLAGS

Эта переменная содержит флаги компилятора C ++, которые используются при создании проекта.Значение этой переменной обычно обрабатывается qmake или qmake.conf и редко нуждается в изменении.Флаги, специфичные для режимов отладки и выпуска, можно настроить, изменив переменные QMAKE_CXXFLAGS_DEBUG и QMAKE_CXXFLAGS_RELEASE соответственно.Примечание. На платформе Symbian эта переменная может использоваться для передачи специфических параметров архитектуры каждому компилятору в системе сборки Symbian.Например:

QMAKE_CXXFLAGS.CW += -O2
QMAKE_CXXFLAGS.ARMCC += -O0 

Для получения дополнительной информации см. Замечания по платформе qmake.

Поэтому я бы начал с

QMAKE_CXXFLAGS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

который вы можете просто добавить в файл .pro.

...