windows - Ændring .ui-fil ville ikke regenerere ui\_xxx.h ved hjælp af cmake 3.6

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et simpelt setup med main.cpp, mainwindows.cpp, mainwindow.h og mainwindow.ui med denne cmake-fil:


cmake\_minimum\_required(VERSION 3.1.0 FATAL\_ERROR)
project(test\_qt\_with\_cmake)

set(CMAKE\_CXX\_STANDARD 11) # use c++11

# Find includes in corresponding build directories
set(CMAKE\_INCLUDE\_CURRENT\_DIR ON)

set(CMAKE\_PREFIX\_PATH "C:/Qt/5.8/msvc2015\_64")

# Instruct CMake to run moc automatically when needed.
set(CMAKE\_AUTOMOC ON)
set(CMAKE\_AUTOUIC ON)

find\_package(Qt5Widgets)

set(PROJECT\_INCLUDE\_DIR "${PROJECT\_SOURCE\_DIR}")

######## PROJECT DEPENDENCIES #########
if(WIN32)
    set(CMAKE\_PREFIX\_PATH ${CMAKE\_PREFIX\_PATH} ${PROJECT\_SOURCE\_DIR}/windows)
endif()

set(CMAKE\_MODULE\_PATH ${CMAKE\_MODULE\_PATH} "${PROJECT\_SOURCE\_DIR}/cmake")

#=====================================

include\_directories(
    ${PROJECT\_INCLUDE\_DIR}
)

add\_executable(test\_qt WIN32 main.cpp mainwindow.cpp mainwindow.h)
target\_link\_libraries(test\_qt Qt5::Widgets)

add\_custom\_command(TARGET test\_qt POST\_BUILD
    COMMAND ${CMAKE\_COMMAND} -E copy\_directory
        "${PROJECT\_SOURCE\_DIR}/windows/bin"
        $<TARGET\_FILE\_DIR:test\_qt>)


Ui\_xxx.h genereres første gang, jeg bygger projektet og regenereres, hvis .ui-filen og en af ​​kildefilen ændres. Hvad jeg vil gerne, er at få ui\_xxx.h til at blive regenereret everytime .ui fil ændres med eller uden kildeændring.


Jeg har taget et kig på https://github.com/euler0/mini-cmake-qt, men example\_automoc-projektet er altid forældet, og vi skal altid bede om at genopbygge projektet. [3]


Er der noget galt i min cmake-fil? eller er det en fejl i cmake?


Bemærk: Jeg bruger mt 5.8 med cmake 3.6 på Windows 10 ved hjælp af Visual Studio 14 2015 generator


opdatering : fjernelse af sæt (CMAKE\_AUTOUIC ON) og angivelse af ui-filen med:


qt5\_wrap\_ui(UI\_HEADERS mainwindow.ui) 


ser ud til at løse problemet. Det oprindelige spørgsmål er stadig gyldigt, hvilket er hvordan man laver dette arbejde uden at specificere .ui-filen (ved at ringe qt5\_wrap\_ui)?

Bedste reference