Авто-moc при изменении файла * .ui, используя visual studio и cmake - PullRequest
0 голосов
/ 31 октября 2018

У меня есть проект 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...