Qt: разница между выводом moc в отладке и выпуске? - PullRequest
4 голосов
/ 09 октября 2008

Используя интеграцию Qt Visual studio, добавление нового класса Qt добавляет два отдельных сгенерированных файла moc.exe - один для отладки и один для выпуска (и один для любой другой существующей конфигурации). И все же два возможных сгенерированных файла кажутся идентичными.

С другой стороны, при добавлении класса пользовательского интерфейса созданные файлы uic.exe не имеют такого разделения и являются одним и тем же файлом для всех конфигураций.

У кого-нибудь есть идея, почему для каждой конфигурации нужен отдельный moc-файл? Когда есть разница между ними?

Ответы [ 2 ]

8 голосов
/ 09 октября 2008

Я думаю, что отдельные версии отладки и выпуска необходимы, потому что вывод moc генерируется из пользовательского исходного кода. Таким образом, выходные данные moc могут отличаться между сборками отладки и выпуска, если предварительно обработанный источник класса отличается между отладкой и выпуском (например, сигнал, который существует только в сборке отладки).

Это не относится к сгенерированным uic файлам, потому что они сгенерированы из .ui XML, который не может варьироваться между конфигурациями отладки и выпуска.

7 голосов
/ 09 октября 2008

Moc анализирует источник для директив препроцессора. Так что, если у вас есть такой заголовочный файл:

class Test : public QObject
{
    Q_OBJECT
public:
        Test();             
public slots:

#ifndef DEBUG
        void    Foo();
#endif
};

Тогда слот Foo будет существовать только в сборке выпуска, а не в отладочной сборке. Moc генерирует различные файлы moc.cpp в зависимости от того, установлен ли символ DEBUG (в данном случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...