我有一个qt项目,该项目由cmake管理,并为Visual Studio 2015生成一个* .sln文件。
我使用
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
告诉cmake,它应该在构建过程开始时就uic和moc。现在,每次更改用Q_OBJECT声明的类时,都会调用moc,并且每次更改类(包括ui _ *。h文件)时,都会执行uic。所以到目前为止一切都很好。
当我仅从qt uic更改* .ui文件时,应调用moc,但Visual Studio无法识别它应生成automoc / autouic。
当* .ui文件更改时,如何才能实现uic / moc的调用?
其他信息: 这是我告诉cmake生成可执行文件的方式。
add_executable(program ${pro_SRCS} ${pro_HDRS} ${pro_UI})
在SRCS
变量中是我所有的* .cpp文件,在HDRS
中是我的* .h文件,在UI
中都是我的* .ui文件。我知道我只需要SRCS,但是我希望所有文件都显示在Visual Studio中。
CMakeLists.txt示例:
cmake_minimum_required (VERSION 3.1.0)
project (project)
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT project)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_SUPPRESS_REGENERATION true)
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release)
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
"Configurate Debug and Release build."
FORCE)
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
find_package(
Qt5
COMPONENTS
Widgets
OpenGL
PrintSupport
CONFIG
REQUIRED)
# Populate a CMake variable with the sources
set(pro_SRCS
main.cpp
...
)
set(pro_HDRS
header.h
...
)
set(pro_UI
ui/main.ui
)
add_executable(pro ${pro_SRCS} ${pro_HDRS} ${pro_UI})
# Use the Widgets module from Qt 5
if (MSVC)
target_link_libraries(VisuTool Qt5::Widgets Qt5::OpenGL Qt5::PrintSupport glu32 opengl32)
endif(MSVC)
# show ui files in visual studio
source_group("UI Files" FILES ${pro_UI})