将相关源文件放入库时,带有 CMake 的 Qt5 不编译 .ui 文件
Posted
技术标签:
【中文标题】将相关源文件放入库时,带有 CMake 的 Qt5 不编译 .ui 文件【英文标题】:Qt5 with CMake not compiling .ui file when related source files are put into a library 【发布时间】:2014-12-27 01:02:31 【问题描述】:我正在尝试使用 CMake 编译具有多个子目录的 Qt5 项目。一些 Qt .ui 文件相关代码使用add_library
命令编译为库。我发现ui_*.h
头文件根本没有用uic
编译。但是如果我把 .ui 相关的源文件放在add_executable
中,那么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)
【问题讨论】:
我找到了解决方案。add_library(window mainwindow.cpp)
应更改为 add_library(window mainwindow.cpp $UI_HEADERS)
您应该将您的解决方案发布为答案并将其标记为已接受,以表明问题已解决。
【参考方案1】:
我找到了解决方案。该行 add_library(window mainwindow.cpp) 应更改为 add_library(window mainwindow.cpp $UI_HEADERS)
【讨论】:
以上是关于将相关源文件放入库时,带有 CMake 的 Qt5 不编译 .ui 文件的主要内容,如果未能解决你的问题,请参考以下文章