【问题标题】:CMake Qt UIC failedCMake Qt UIC 失败
【发布时间】:2017-10-21 11:22:51
【问题描述】:

我目前正在将我的项目从 QMake 移动到 CMake,并且我遇到了 Qt UIC 的问题,它试图处理一个不存在的 ui 文件,而不是我希望他处理的实际文件。

我有以下架构

.
|___ CMakeLists.txt
|___ MyProject.pro
|___ mainwindow.ui
|___ resource.qrc
|___ source
|    |___ mainwindow.cpp
|    |___ *.cpp
|___ include
|    |___ mainwindow.h
|    |___ *.h

这是我的cmake

cmake_minimum_required(VERSION 3.2)

# Project name
project(project)

# Tell CMake to compile with C++11
set(CMAKE_CXX_STANDARD 11)

# Tell CMake to run moc when needed.
set(CMAKE_AUTOMOC ON)

# Tell CMake to run uic when needed.
set(CMAKE_AUTOUIC ON)

# Tell CMake to run rcc when needed
set(CMAKE_AUTORCC ON)

# Moc generated files are located in the current dir so we need to tell CMake to look for them.
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Find Qt5
find_package(Qt5 COMPONENTS Widgets Core Gui OpenGL REQUIRED)
# Add Qt5 definitions and includes to build libraries. 
# Widgets add Widgets Core and Gui
add_definitions(${Qt5Widgets_DEFINITIONS})
include_directories(${Qt5Widgets_INCLUDES})

add_definitions(${Qt5OpenGL_DEFINITIONS})
include_directories(${Qt5OpenGL_INCLUDES})


# Find OpenGL
find_package(OpenGL REQUIRED)

# Set include directories
include_directories(${CMAKE_SOURCE_DIR}/include

# Use Qt5 ressources
set(RESOURCE resources.qrc)
# Use Qt5 ui
set(UI mainwindow.ui)

# Adding sources
set(SOURCES
    source/main.cpp
    source/mainwindow.cpp
    source/octree.cpp
    source/mesh.cpp
    source/pgm3d.cpp
    source/glwidget.cpp
    source/camera.cpp
    source/scene.cpp 
    source/light.cpp 
    source/obj.cpp 
    source/alignedbox3f.cpp 
    source/wireboundingbox.cpp

    include/mainwindow.h
    include/utils.h
    include/octree.h
    include/mesh.h
    include/pgm3d.h
    include/glwidget.h
    include/camera.h
    include/scene.h
    include/model3d.h
    include/light.h
    include/obj.h
    include/alignedbox3f.h
    include/wireboundingbox.h)


add_executable(${PROJECT_NAME} ${UI} ${RESOURCE} ${SOURCES} )
target_link_libraries(${PROJECT_NAME} ${Qt5Widgets_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${OPENGL_LIBRARIES})

我收到以下错误:

File '/*/project/source/mainwindow.ui' is not valid
AUTOUIC: error: process for ui_mainwindow.h needed by
 "/*/project/source/mainwindow.cpp"
failed:
File '/*/project/source/mainwindow.ui' is not valid

这个错误是完全合乎逻辑的,因为我的源文件夹不包含 ui 文件。我尝试包装 ui 而不是使用 autouic,但它也不起作用。

【问题讨论】:

  • 尝试清理构建目录缓存并重新开始。另外我建议不要将目标文件放入项目目录中。保持清洁。
  • 已经尝试清理所有内容,但没有成功。

标签: qt cmake qmake uic


【解决方案1】:

目标的AUTOUIC 属性(在创建目标时从变量CMAKE_AUTOUIC 设置)定义生成器的行为 - 当AUTOUIC 属性启用时,CMake 将扫描源用于包含 ui 文件(如 #include "ui_*.h"#include <ui_*.h>)的文件,并将使用 uic 工具自动处理它们。
在 CMake 3.9 中添加了另一个目标属性 AUTOUIC_SEARCH_PATHS。类似的问题已经被问到here


另一个选项是禁用 AUTOUIC 并使用带有 UI 文件完整路径的 qt5_wrap_ui

set(CMAKE_AUTOUIC OFF)
set(UI ${CMAKE_CURRENT_LIST_DIR}/mainwindow.ui)
...
qt5_wrap_ui(UI_HEADERS ${UI})
add_executable(${PROJECT_NAME} ${UI_HEADERS} ${RESOURCE} ${SOURCES} )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2023-01-18
    • 2019-08-15
    • 2016-12-30
    相关资源
    最近更新 更多