如何向moc_predefs.h添加定义?

时间:2019-04-09 15:37:02

标签: c++ qt qmake moc

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向文件添加一些额外的定义。

3 个答案:

答案 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