Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:';AUTOMOC&x27;功能跳过可执行目标的源?_C++_Qt_Cmake_Executable_Moc - Fatal编程技术网

C++ CMake:';AUTOMOC&x27;功能跳过可执行目标的源?

C++ CMake:';AUTOMOC&x27;功能跳过可执行目标的源?,c++,qt,cmake,executable,moc,C++,Qt,Cmake,Executable,Moc,有一个中等规模的项目,它有一个顶级的CMakeLists.txt,它定义了一些常见的东西,并调用项目中所有工件(子项目)的配置,如下所示: add_subdirectory(components/A) add_subdirectory(components/B) add_subdirectory(components/C) add_subdirectory(components/E) 工件是静态/共享库或可执行文件(以某种方式相互依赖)。在本例中,只有一个可执行文件:E。当使用纯旧qt4\u

有一个中等规模的项目,它有一个顶级的
CMakeLists.txt
,它定义了一些常见的东西,并调用项目中所有工件(子项目)的配置,如下所示:

add_subdirectory(components/A)
add_subdirectory(components/B)
add_subdirectory(components/C)

add_subdirectory(components/E)
工件是静态/共享库或可执行文件(以某种方式相互依赖)。在本例中,只有一个可执行文件:
E
。当使用纯旧
qt4\u wrap\u cpp
处理MOC时,所有配置和构建都非常好

切换到(相对)新的功能时,将以下内容添加到顶部
CMakeLists.txt

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
所有静态/共享库的源代码都是AUTOMOC。但是,可执行目标的源(
E
,在本例中)永远不会
AUTOMOC
'ed

我尝试了
MSYS Makefiles
Ninja
生成器,它们都没有为
AUTOMOC
'ing创建目标,只是为可执行文件源创建了目标(对于静态/共享库目标,添加了
AUTOMOC
'ing目标)

  • 已经有人经历过了吗
  • 原因可能是什么
  • 那闻起来像虫子吗
更新

我找到了原因,讨论还在继续。

总结一下,问题是
E
没有明确包括Qt模块:

find_package(Qt4 ...)
也不是含蓄地:

find_package(MyPrecious ...)
其中,
MyPrecious
可能是某个第三方模块,它本身就包含Qt

因此,
E
子项目的范围内不存在非缓存变量,如
QT\u VERSION.*
,因此,
AUTOMOC
功能无法正常工作。我得说,这是个可怕的陷阱。有关更多详细信息,请参阅