Как добавить определения в moc_predefs.h? - PullRequest
1 голос
/ 09 апреля 2019

Qt moc.exe генерирует файлы moc_predefs.h, которые содержат некоторые определения, которые включены в каждый файл, который анализирует moc.Есть ли способ добавить определения к этим файлам?

Я бы хотел определить в этих файлах некоторые элементы защиты для включения, чтобы moc.exe не анализировал некоторые заголовки (в основном сторонние заголовки, такие как boost).Я мог бы определить эти охранники напрямую как параметр moc, используя QMAKE_MOC += -Dfoo, но это излишне раздуло бы make-файлы, было бы намного приятнее иметь его непосредственно в файле moc_predefs.h.

Я заметил, что флагиопределено в файле pro, например, QMAKE_CXXFLAGS += -Dfoo, производит определение в moc_predefs.h.Но, очевидно, я не хочу определять защитные элементы для сборки, только для moc ...

Примечание. Я не хочу изменять сгенерированные файлы напрямую, я ищу способ сообщить qmake/ moc для добавления некоторых дополнительных определений к файлам.

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Я не проверял, но надеюсь, что это сработает:

myproject.pro

...
# add this to the end of file
QMAKE_CXXFLAGS += -Dfoo
load(moc)
QMAKE_CXXFLAGS -= -Dfoo
CONFIG -= moc

Я ищу способ указать qmake / moc добавить некоторые дополнительные определения в файлы.

Проблема заключается в том, что moc_predefs.h генерируется препроцессором C (например, g++ -E -dM $$QMAKE_CXXFLAGS ...), а не самим moc (в последнем случае QMAKE_MOC_OPTIONS сделает свое дело). Так что QMAKE_CXXFLAGS является единственной релевантной переменной здесь.

0 голосов
/ 10 апреля 2019

Было довольно сложно добавить определения к moc_predefs.h, но есть и другой способ достижения того же результата. Moc имеет параметр командной строки @<file>, который позволяет читать дополнительные параметры командной строки moc из файла. Таким образом, можно создать текстовый файл, содержащий определения, например -Dfoo, по одному на строку.

Этот файл можно добавить к параметрам командной строки moc в файле *.pro:

load(moc)
QMAKE_MOC += @moc_ignored_file_guards.txt
0 голосов
/ 09 апреля 2019

Если у вас есть доступ к Cmake, вы можете настроить свою сборку на использование AUTOMOC , которая будет выборочно запускаться при обнаружении зависимости от файла moc, а также предоставляет элемент управления SKIP_AUTOMOC для исключения файлов изMOC D

...