将相关源文件放入库时,带有 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

当我链接动态库而不是静态库时,CMake 有效

qt creator qt5.1 vs2010 使用静态库时链接器错误

Qt5.3.1 OpenCV2.4.9 开发环境配置

构建 MRPT 库时 cmake 配置失败

CMake Qt5无法为ui文件AUTOUIC生成头文件

无法在 Qt5/cmake 项目中加载 Qt 资源文件中指定的图像