【问题标题】:msvc not generate moc file with CMake automocmsvc 不使用 CMake automoc 生成 moc 文件
【发布时间】:2018-11-23 12:59:21
【问题描述】:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

set(source_files
    a.cpp
    b.cpp
    ...
   )

set(header_files
    a.hpp
    b.hpp
    ...
   )

set(Qt_libs
    Qt5::Core
    Qt5::Gui
    Qt5::Widget
    ...
   )

add_library(demo SHARED ${header_files} ${source_files})
target_link_libraries(demo ${Qt_libs} ...)
set_properties(TARGET demo PROPERTY FOLDER "somewhere")
install(...)

我有一个示例CMakeLists.txt 如上所示。

最奇怪的是,它不会生成那些 moc 文件,直到我手动修改(比如在文件中添加一个空行)那些头文件(Q_OBJECT 出现的地方)。

这种情况并非每次都发生。但是,一旦发生这种情况,清理构建或删除整个项目文件都无济于事。

我正在使用qt 5.11CMake 3.7Visual Studio 2015

【问题讨论】:

  • 我对@9​​87654328@ 也有疑问(很多其他人可能会告诉你)。添加需要moc的新文件后,我总是运行cmake configure
  • 我有类似的问题,无法解决。所以我决定使用 qt5_generate_moc() 宏
  • @Mac 我将头文件和源文件都添加到目标中。它似乎不是由于处理 CMake 文件错误而产生的,因为问题只是有时会发生。
  • 您是否尝试按照那里的说明将标题添加到解决方案中?

标签: visual-studio qt visual-c++ cmake


【解决方案1】:

您正在使用 set() 设置全局设置,该设置可能会被覆盖。 请使用 set_target_properties,例如

project(exampleProj)
add_executable(exampleProj main.cpp)
set_target_properties(exampleProj
   PROPERTIES
     CMAKE_INCLUDE_CURRENT_DIR ON
     CMAKE_AUTOMOC ON)

【讨论】:

  • 感谢您的回答,我会尝试并稍后发布结果。
  • @Ducksoul 如果您对此答案没有成功,请考虑使用 CMakelists.txt 文件的内容更新您的问题,以便答案可能包含更多上下文
  • 这种方法尝试了几次后似乎没有解决问题。而且我的 Cmake 文件和stackoverflow.com/questions/37151163/… 差不多
  • @Ducksoul 我需要你的 sn-p 以便查看 set_target_properties 是否用于有效目标。如果内容是敏感的,排除源文件名仍会产生最小的、可验证的示例
  • @Ducksoul 您是否在 a.cpp 文件的底部附加了#include "a.moc"(假设 a 是 Q_OBJECT 的名称)?如果没有,您可以尝试这样做吗?我重读了你的问题,我正在查看“在我手动修改之前它不会生成那些 moc 文件”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多