C++ Qt moc如何处理ifdef?

C++ Qt moc如何处理ifdef?,c++,qt,cmake,qt5,moc,C++,Qt,Cmake,Qt5,Moc,我在代码中添加了一些#ifdef部分。现在省略了想要的部分,但是 生成的moc文件中有对省略成员的引用,并且仅从那里引用。我是否需要以特殊方式使用#infdef-s,或者根本不需要?(我也做了一个干净的构建) 也许发生在中国的事情就是这样 我如何通过CMake构建将我的条件传递给moc?(我使用#cmakedefine) 我试图使用 if(My_MODE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMy_MODE") endif(My_MODE)

我在代码中添加了一些
#ifdef
部分。现在省略了想要的部分,但是 生成的moc文件中有对省略成员的引用,并且仅从那里引用。我是否需要以特殊方式使用#infdef-s,或者根本不需要?(我也做了一个干净的构建)

也许发生在中国的事情就是这样 我如何通过CMake构建将我的条件传递给moc?(我使用
#cmakedefine

我试图使用

if(My_MODE)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMy_MODE")
endif(My_MODE)

但它曾经导致对非moc文件发出警告,
My_MODE
被重新定义(好的,我可以删除#cmakdefine),其次,在编译moc文件时,我收到(而不是链接错误)在源文件中找不到“没有名为X的成员”(这是真的,但这就是我将开关传递给编译器的原因).

您可以将预处理器指令传递给
moc
。它们用于预处理文件-Qt本身使用它来根据平台等省略API的一些成员。但您必须确保,您的构建环境正在向
moc
调用添加正确的预处理器指令。您可以将预处理器指令传递给
moc
。它们用于预处理文件-Qt本身使用它根据平台等省略API的一些成员。但您必须确保,您的构建环境正在向
moc
调用添加正确的预处理器指令。