当编译一个Qt/C++程序(-DDISABLE_MYMODULE)的非Qt的版本,我得到这个编译器错误:不能编译MOC文件:头文件不包含
src/mymodule.moc.cpp:12:2: error: #error "The header file
'mymodule.hpp' doesn't include ."
src/mymodule.moc.cpp:19:1: error: ‘QT_BEGIN_MOC_NAMESPACE’ does not name a type
src/mymodule.moc.cpp:40:6: error: ‘MyModule’ has not been declared
...
我使用的是GNU make(而不是qmake)。我的Makefile为每个模块编译两个目标文件,一个直接来自.cpp源文件,另一个来自.moc.cpp源文件的MOC目标文件(这是行不通的),都使用g ++。这个.moc.cpp源文件是由MOC从.hpp头创建的(这个过程不会引发错误)。
有问题的头文件看起来有点像这样:
#ifndef DISABLE_MYMODULE //My problem macro
#ifndef MYMODULE_HPP
#define MYMODULE_HPP
//...
class MyModule : //...
{
Q_OBJECT //Qt problem macro
//...
};
//...
#endif
#endif
整个事情将编译(以及后来的链接,执行)就好了,如果不设置我的问题宏。如果我确实设置了它,但是注释掉QT的问题宏,它也会很好地编译(构建非Qt版本)。
我不完全知道,什么MOC取代Q_OBJECT的,但不应该它仍然在我的DISABLE_MYMODULE,因此被预处理器删除?
2012-04-29
basic6