我正在尝试使用 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(窗口主窗口.cpp ${UI_HEADERS})