cmake + qt + visual studio:构建中的 moc 对象
cmake + qt + visual studio: moc objects on build
我正在使用 cmake + qt + visual studio 来处理一个项目。问题 如果我修改 QT ui 文件,我希望 visual studio 创建新的 moc 对象。如果我只是做一个完整的 build everything works 文件,但如果我只是修改 ui 文件上的某些内容,它不会 "auto moc" 我必须 rebuild整个项目。
我的 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 文件修改和 "auto moc" 修改后的 ui 文件)?
如果您想要正确的依赖关系处理,请先将您的 file(GLOB ...)
替换为明确列出要包含的文件。这也将确保构建为您期望的文件集创建依赖项。 This answer 除了以下原因外,还有更多关于您可能想要这样做的原因的详细信息。
CMake documentation for AUTOUIC 包含此语句:
If a preprocessor #include
directive is found which matches
ui_<basename>.h
, and a <basename>.ui
file exists, then uic
will be
executed to generate the appropriate file.
您能否确认您的 .cpp 源具有遵循此模式的 #include
指令?在你的 file(GLOB ...)
中,你只捕获 .cpp 文件而不是 .h 文件,所以如果你在 headers 中只有 #include
指令,AUTOUIC 可能无法接收它们适当地。自从我使用它以来已经有一段时间了,我不记得如果你只列出 .cpp 文件而不是 add_executable()
调用中的 headers,AUTOUIC 是否仍能找到它们,但它是一些让你尝试的东西。如果您有使用 Q_OBJECT 和 Q_GADGET 宏的 headers,您也可能面临与 AUTOMOC 类似的情况。因此,只需明确列出您提供给 add_executable()
的 .cpp 和 .h 文件,看看是否能解决您的问题。
我正在使用 cmake + qt + visual studio 来处理一个项目。问题 如果我修改 QT ui 文件,我希望 visual studio 创建新的 moc 对象。如果我只是做一个完整的 build everything works 文件,但如果我只是修改 ui 文件上的某些内容,它不会 "auto moc" 我必须 rebuild整个项目。
我的 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 文件修改和 "auto moc" 修改后的 ui 文件)?
如果您想要正确的依赖关系处理,请先将您的 file(GLOB ...)
替换为明确列出要包含的文件。这也将确保构建为您期望的文件集创建依赖项。 This answer 除了以下原因外,还有更多关于您可能想要这样做的原因的详细信息。
CMake documentation for AUTOUIC 包含此语句:
If a preprocessor
#include
directive is found which matchesui_<basename>.h
, and a<basename>.ui
file exists, thenuic
will be executed to generate the appropriate file.
您能否确认您的 .cpp 源具有遵循此模式的 #include
指令?在你的 file(GLOB ...)
中,你只捕获 .cpp 文件而不是 .h 文件,所以如果你在 headers 中只有 #include
指令,AUTOUIC 可能无法接收它们适当地。自从我使用它以来已经有一段时间了,我不记得如果你只列出 .cpp 文件而不是 add_executable()
调用中的 headers,AUTOUIC 是否仍能找到它们,但它是一些让你尝试的东西。如果您有使用 Q_OBJECT 和 Q_GADGET 宏的 headers,您也可能面临与 AUTOMOC 类似的情况。因此,只需明确列出您提供给 add_executable()
的 .cpp 和 .h 文件,看看是否能解决您的问题。