【问题标题】:cmake + qt + visual studio: moc objects on buildcmake + qt + visual studio:构建时的moc对象
【发布时间】:2016-04-05 19:05:11
【问题描述】:

我正在使用 cmake + qt + Visual Studio 来处理一个项目。问题如果我修改 QT ui 文件,我希望 Visual Studio 创建新的 moc 对象。如果我只是完全构建一切工作文件,但如果我只是修改 ui 文件上的某些内容,它不会“自动 moc”,我必须重建整个项目。

我的cmake文件很简单:

cmake_minimum_required(VERSION 3.2)

set(CMAKE_VERBOSE_MAKEFILE ON)

project(main)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5Widgets)

file(GLOB CPP_FILES *.cpp)

add_executable(main ${CPP_FILES})
target_link_libraries(main Qt5::Widgets)
target_compile_features(main PUBLIC cxx_nullptr)

有谁知道让它工作的方法(让 Visual Studio 检测 ui 文件修改并“自动 moc”修改后的 ui 文件)?

【问题讨论】:

    标签: visual-studio qt cmake moc


    【解决方案1】:

    如果您想要正确的依赖关系处理,首先将您的file(GLOB ...) 替换为明确列出您想要包含的文件。这也将确保构建为您期望的文件集创建依赖关系。除了以下原因之外,This answer 有更多关于您可能想要这样做的原因的详细信息。

    CMake documentation for AUTOUIC 包含以下声明:

    如果找到匹配的预处理器 #include 指令 ui_<basename>.h,并且存在<basename>.ui 文件,则uic 将是 执行以生成适当的文件。

    您能否确认您的 .cpp 源具有遵循此模式的 #include 指令?在您的 file(GLOB ...) 中,您只捕获 .cpp 文件而不是 .h 文件,因此如果您在标题中只有 #include 指令,AUTOUIC 可能无法正确获取它们。我已经有一段时间没有使用它了,如果您只在add_executable() 调用中列出 .cpp 文件而不是标头,我不记得 AUTOUIC 是否仍能找到它们,但您可以尝试一下。如果您有使用 Q_OBJECT 和 Q_GADGET 宏的标头,您也可能面临与 AUTOMOC 类似的情况。因此,只需明确列出您提供给add_executable() 的 .cpp 和 .h 文件,看看是否能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      相关资源
      最近更新 更多