如何将定义添加到moc_predefs.h?

问题描述 投票:1回答:3

Qt的moc.exe生成文件moc_predefs.h,它包含一些定义,包含在moc解析的每个文件中。有没有办法为这些文件添加定义?

我想在这些文件中定义一些包含防护,以防止moc.exe解析一些标题(主要是第三方标题,如boost)。我可以使用QMAKE_MOC += -Dfoo将这些守卫直接定义为moc的参数,但这会不必要地使makefile变得臃肿,将它直接放在moc_predefs.hfile中要好得多。

我注意到pro文件中定义的标志,例如QMAKE_CXXFLAGS += -Dfoo产生在moc_predefs.h定义。但显然我不想为构建定义包含防护,仅适用于moc ......

注意我不想直接修改生成的文件,我正在寻找一种方法告诉qmake / moc为文件添加一些额外的定义。

c++ qt qmake moc
3个回答
1
投票

我没有检查它,但我希望这可能有效:

没有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是这里唯一的相关变量。


0
投票

如果您有权访问Cmake,则可以将构建配置为使用AUTOMOC,它将在遇到moc文件依赖项时有选择地运行,并且还提供SKIP_AUTOMOC控件以排除文件被MOC'd


0
投票

事实证明,向moc_predefs.h添加定义非常困难,但还有另一种方法可以实现相同的结果。 Moc有一个command line option @<file>,可以从文件中读取其他moc命令行选项。因此,可以创建一个包含-Dfoo等定义的文本文件,每行一个。

此文件可以添加到*.pro文件中的moc命令行参数:

load(moc)
QMAKE_MOC += @moc_ignored_file_guards.txt
© www.soinside.com 2019 - 2024. All rights reserved.