cmake + qt + visual studio:构建

时间:2016-04-05 19:05:11

标签: visual-studio qt cmake moc

我正在使用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文件)?

1 个答案:

答案 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文件,看看是否能解决您的问题。