Qt: Work around autouic bug causing unnecessary recompiles

This commit is contained in:
Stenzek 2025-07-18 20:07:10 +10:00
parent a002fd2672
commit 6615fc79d6
No known key found for this signature in database

View File

@ -1,7 +1,8 @@
include(CopyBaseTranslations) include(CopyBaseTranslations)
set(CMAKE_AUTOUIC OFF)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON)
set(SRCS set(SRCS
aboutdialog.cpp aboutdialog.cpp
@ -125,6 +126,7 @@ set(SRCS
postprocessingsettingswidget.cpp postprocessingsettingswidget.cpp
postprocessingsettingswidget.h postprocessingsettingswidget.h
postprocessingchainconfigwidget.ui postprocessingchainconfigwidget.ui
postprocessingoverlayconfigwidget.ui
qthost.cpp qthost.cpp
qthost.h qthost.h
qtkeycodes.cpp qtkeycodes.cpp
@ -179,6 +181,22 @@ target_compile_definitions(duckstation-qt PRIVATE QT_NO_EXCEPTIONS)
add_core_resources(duckstation-qt) add_core_resources(duckstation-qt)
# Automatically generate a list of .ui calls and call qt_wrap_ui() to generate targets.
# This is needed because otherwise CMake rebuilds all source files if any unrelated files change.
# See https://gitlab.kitware.com/cmake/cmake/-/issues/22531 and https://gitlab.kitware.com/cmake/cmake/-/issues/16776
# Documentation says to use qt_add_ui(), but this generates a separate directory for every file.
# I'm concerned about arg length limits, so I manually invoke qt_wrap_ui().
# Also see https://github.com/thorntonryan/autouic_example.
set(UI_FILES "")
foreach(src ${SRCS})
if(src MATCHES "\\.ui$")
list(APPEND UI_FILES ${src})
endif()
endforeach()
qt_wrap_ui(UI_SRCS SOURCES ${UI_FILES})
target_sources(duckstation-qt PRIVATE ${UI_SRCS})
target_include_directories(duckstation-qt PRIVATE "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>")
if(WIN32) if(WIN32)
target_sources(duckstation-qt PRIVATE target_sources(duckstation-qt PRIVATE
duckstation-qt.rc duckstation-qt.rc