У меня есть проект qt, который управляется cmake и создает файл * .sln для visual studio 2015.
Я использую
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
, чтобы сказать cmake, что он должен uic и moc в начале процесса сборки. Теперь каждый раз, когда класс, объявленный с помощью Q_OBJECT, изменяется, вызывается moc, и каждый раз, когда класс изменяется, включая ui _ *. H файл uic, выполняется. Так что до сих пор все хорошо.
Когда я изменяю только файл * .ui из qt uic, должен вызываться 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})