gpt4 book ai didi

c++ - CMake: 'AUTOMOC' 功能跳过可执行目标的来源?

转载 作者:太空狗 更新时间:2023-10-29 21:24:24 24 4
gpt4 key购买 nike

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

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

add_subdirectory(components/E)

工件是静态/共享库或可执行文件(它们以某种方式相互依赖)。在本例中,只有一个可执行文件:E。当普通的旧 qt4_wrap_cpp 用于处理 MOC 时,一切配置和构建都完美无缺。

切换到(相对)新的AUTOMOC 通过将以下内容添加到顶部 CMakeLists.txt 来实现:

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

所有静态/共享库的源代码都是 AUTOMOC 的。但是,可执行目标的源(本例中的 E)永远不会被 AUTOMOC 编辑。

我已经尝试过 MSYS MakefilesNinja 生成器,它们都不会为 AUTOMOC 创建目标,而只是对于可执行文件的源(对于静态/共享库目标,添加了 AUTOMOC'ing 目标)。

  • 有人经历过吗?
  • 可能是什么原因?
  • 闻起来像 bug 吗?

更新


找到原因了,讨论在CMake mailing list .

最佳答案

总而言之,问题是 E 既没有显式地包含 Qt 模块:

find_package(Qt4 ...)

也不是含蓄地:

find_package(MyPrecious ...)

其中 MyPrecious 可能是一些包含 Qt 本身的第 3 方模块。

因此,QT_VERSION_* 等非缓存变量不存在于 E 子项目的范围内,因此 AUTOMOC功能无法正常运行。我会说讨厌的陷阱。有关详细信息,请参阅 CMake mailing list .

关于c++ - CMake: 'AUTOMOC' 功能跳过可执行目标的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com