Qt的moc.exe生成文件moc_predefs.h
,其中包含一些定义,这些定义包含在moc解析的每个文件中。有没有办法向这些文件添加定义?
我想在这些文件中定义一些包括保护措施,以防止moc.exe解析某些标头(主要是boost等第三者标头)。我可以使用QMAKE_MOC += -Dfoo
将这些保护直接定义为moc的参数,但这会不必要地使makefile膨胀,将其直接存储在moc_predefs.h
文件中会更好。
我注意到pro文件中定义的标志,例如QMAKE_CXXFLAGS += -Dfoo
中产生moc_predefs.h
中的定义。但是显然我不想为构建定义包含保护,只是为了移动而已。
注意,我不想直接修改生成的文件,我正在寻找一种方法告诉qmake / moc向文件添加一些额外的定义。
答案 0 :(得分:1)
我没有检查它,但我希望这可能起作用:
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
是这里唯一相关的变量。
答案 1 :(得分:0)
如果有权使用Cmake,则可以将构建配置为使用AUTOMOC,该构建将在遇到moc
文件依赖项时有选择地运行,并且还提供SKIP_AUTOMOC控件以排除文件MOC
答案 2 :(得分:0)
事实证明很难在moc_predefs.h
中添加定义,但是还有另一种方法可以达到相同的结果。 Moc具有command line option @<file>
,可从文件中读取其他Moc命令行选项。因此,可以创建一个包含-Dfoo
之类的定义的文本文件,每行一个。
可以将此文件添加到*.pro
文件中的moc命令行参数中:
load(moc)
QMAKE_MOC += @moc_ignored_file_guards.txt