Должен ли я использовать #ifndef Q_MOC_RUN, насколько это возможно? - PullRequest
1 голос
/ 24 марта 2020

У меня есть проект Qt / C ++, использующий библиотеку Boost, и я вижу, что заголовки Boost включены следующим образом:

#ifndef Q_MOC_RUN
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#endif

Я прочитал, что если вы этого не сделаете, MO C может вызывает проблемы.

Вопрос в том, должен ли я тогда использовать эту защиту для включения всех других заголовков, которые определенно не содержат Q_OBJECT marco? Например, стандартные библиотечные заголовки и другие не-Qt библиотеки? Разве это не сэкономит много времени при запуске препроцессора MO C?

1 Ответ

2 голосов
/ 24 марта 2020

Из топи c Qt5 mo c ошибка в сочетании с бустом :

Во-первых, это известная проблема MO C. MO C не может раскрыть некоторые макросы, используемые в библиотеке Boost. Я считаю, что причина работы Qt 4.8 заключается в том, что в MO * был добавлен обходной путь для определения c определений макросов Boost. 1021 * конфигурация для этой версии.

Что нужно сделать, чтобы обойти эту проблему: Как указано выше, используйте Q_MOC_RUN для комментирования проблемных c заголовков. Вам ТОЛЬКО нужно использовать Q_MOC_RUN в файлах, которые создают файл mo c (например, myheader.h создаст moc_myheader. cpp). Вы можете ограничить взлом только этими файлами. Таким образом, вам не нужно #ifndef использовать все заголовки Boost в вашем проекте, что немного ограничивает реализацию этого решения.

Кажется, эта проблема была исправлена ​​довольно долго go так что если у вас нет проблем и вам не нужно поддерживать старые версии Qt, вы можете не добавлять этот макрос в свой будущий код.

...