我正在尝试用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)
答案 0 :(得分:1)
我找到了解决方案。应将add_library(window mainwindow.cpp)行更改为add_library(window mainwindow.cpp $ {UI_HEADERS})