Qt5,当相关源文件放入库时,CMake不编译.ui文件

时间:2014-12-27 01:02:32

标签: cmake qt5

我正在尝试用CMake编译一个带有多个子目录的Qt5项目。一些Qt .ui文件相关代码使用add_library命令编译为库。我发现ui_*.h头文件根本不用uic编译。但是如果我在add_executable中放入.ui相关的源文件,则会自动生成ui_*.h文件。在这里,我提供了一个帮助演示此问题的示例项目。可以通过https://www.dropbox.com/s/q2i9imexhjarsbf/qt5-cmake.zip?dl=0访问整个压缩的项目文件。 CMakeLists.txt文件如下所示。我知道还有其他与ui_*.h文件相关的帖子没有生成,但它们似乎没有可以解决我问题的答案。

cmake_minimum_required(VERSION 2.8.11)

project(helloworld)

# Find includes in the build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Turn on automatic invocation of the MOC
set(CMAKE_AUTOMOC ON)


# Add a compiler flag
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

# Find the QtWidgets library
find_package(Qt5Widgets REQUIRED)

# Generate code from ui files
qt5_wrap_ui(UI_HEADERS mainwindow.ui)

# Generate rules for building source files from the resources
qt5_add_resources(QRCS resources.qrc)

add_library(window mainwindow.cpp)
target_link_libraries(window Qt5::Widgets)
# Tell CMake to create the helloworld executable
#add_executable(helloworld main.cpp mainwindow.cpp ${UI_HEADERS} ${QRCS})
add_executable(helloworld main.cpp ${UI_HEADERS})

# Add the Qt5 Widgets for linking
target_link_libraries(helloworld window Qt5::Widgets)

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。应将add_library(window mainwindow.cpp)行更改为add_library(window mainwindow.cpp $ {UI_HEADERS})