如何为QT moc文件提供条件编译标志?

时间:2015-09-15 13:31:10

标签: c++ qt moc

我有test.cpp和test.h文件。 在这些文件中,我需要进行条件编译。

#ifdef CPR
    int iParameter=1;
#else
    int iParameter=2;
#endif

从我调用编译时的shell脚本中,根据编译标志导出类似CPR_BUILD的内容。

export CPR_BUILD=y

在此文件夹的makefile中

ifeq ($(CPR_BUILD),y)
    CXXFLAGS+=CPR
endif

这适用于.cpp文件。 但条件编译不适用于 moc_test.h.cpp 文件。

我想我需要在module_name.pro文件中执行一些操作才能使其可用于moc。但不确定如何。试过类似下面的东西,但是它不起作用。

CPR_BUILD {
  DEFINES += CPR
}

2 个答案:

答案 0 :(得分:0)

moc run已经有一个预处理器符号:

Q_MOC_RUN

请参阅moc

所以你可以这样做:

#ifdef Q_MOC_RUN
    #define CPR
#endif 

答案 1 :(得分:0)

我想出来了。很抱歉在此更新很长时间。

如果使用支持.pro文件的构建根或其他环境,则可以使用

.pro文件。就我而言,它没有被使用。

这是一个简单的基于makefile的编译,其中使用了Qt。因此,“moc”{Qt的元对象编译器}开始出现。

正如我在问题中指出的那样, #ifdef CPR 从未奏效。这是moc正在处理头文件。即使makefile中存在“CFLAGS + = CPR”,也会出现此错误。

解决方案 从Makefile,我们调用moc并通过一点点重命名传递它的头文件。像这样的东西:moc_.cpp 错误是在调用moc时,CFLAGS没有传递给它。事实上,将完整的CFLAGS传递给moc是不合逻辑的,也是不必要的。因此,我因此在调用moc时只需传递-DCPR。