Qt的moc.exe生成文件moc_predefs.h
,它包含一些定义,包含在moc解析的每个文件中。有没有办法为这些文件添加定义?
我想在这些文件中定义一些包含防护,以防止moc.exe解析一些标题(主要是第三方标题,如boost)。我可以使用QMAKE_MOC += -Dfoo
将这些守卫直接定义为moc的参数,但这会不必要地使makefile变得臃肿,将它直接放在moc_predefs.h
file中要好得多。
我注意到pro文件中定义的标志,例如QMAKE_CXXFLAGS += -Dfoo
产生在moc_predefs.h
定义。但显然我不想为构建定义包含防护,仅适用于moc ......
注意我不想直接修改生成的文件,我正在寻找一种方法告诉qmake / moc为文件添加一些额外的定义。
我没有检查它,但我希望这可能有效:
没有project.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
是这里唯一的相关变量。
如果您有权访问Cmake,则可以将构建配置为使用AUTOMOC,它将在遇到moc
文件依赖项时有选择地运行,并且还提供SKIP_AUTOMOC控件以排除文件被MOC
'd
事实证明,向moc_predefs.h
添加定义非常困难,但还有另一种方法可以实现相同的结果。 Moc有一个command line option @<file>
,可以从文件中读取其他moc命令行选项。因此,可以创建一个包含-Dfoo
等定义的文本文件,每行一个。
此文件可以添加到*.pro
文件中的moc命令行参数:
load(moc)
QMAKE_MOC += @moc_ignored_file_guards.txt