我正在使用cmake + qt + visual studio来处理项目。问题我有它,如果我修改QT ui文件,我希望visual studio创建新的moc对象。如果我只是做一个完整的构建一切工作文件,但如果我只是在ui文件上修改它不会" auto 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文件修改和#34;自动moc"修改后的ui文件)?
答案 0 :(得分:2)
首先,如果您需要正确的依赖项处理,请将file(GLOB ...)
替换为明确列出要包含的文件。这还将确保构建为您期望的文件集创建依赖关系。除了以下原因之外,This answer还有更多有关您可能想要这样做的详细信息。
CMake documentation for AUTOUIC包括以下声明:
如果找到匹配的预处理器
#include
指令ui_<basename>.h
存在<basename>.ui
个文件,然后uic
即可 执行以生成适当的文件。
您能否确认您的.cpp源代码符合此模式的#include
指令?在file(GLOB ...)
中,您只捕获.cpp文件,而不是.h文件,因此如果您只在标题中获得#include
指令,则AUTOUIC可能无法正确捕获它们。我已经有一段时间了,因为我已经使用了这个,如果你只列出.cpp文件而不是你的add_executable()
中的标题,我也无法回想起AUTOUIC是否还能找到它们打电话,但它是你尝试的东西。如果您有使用Q_OBJECT和Q_GADGET宏的标头,您也可能面临与AUTOMOC类似的情况。因此,只需明确列出您提供给add_executable()
的.cpp和.h文件,看看是否能解决您的问题。