首页 > 其他分享 >解决cmake编译时*ui,*h存放在不同文件夹下时*.ui无法生成ui_*.h问题

解决cmake编译时*ui,*h存放在不同文件夹下时*.ui无法生成ui_*.h问题

时间:2025-01-16 17:23:36浏览次数:1  
标签:set cmake SOURCE ui 下时 9.4 UI DIR

使用的Qt版本为6.8.1, cmake版本为3.31.0-rc1

遇到问题原因

原本的目录结构比较乱,代码文件一多就很不好找,在对文件进行分类管理的过程中发现*ui文件无法生成ui_*.h

有问题部分的cmake

本来想使用qt_wrap_uiset(CMAKE_AUTOUIC ON)让他自动生成ui_*.h的,但是失败了

cmake_minimum_required(VERSION 3.16)
project(Usim LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_PREFIX_PATH "D:/Qt/Qt6.8.1/6.8.1/msvc2022_64")    

find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Charts)
qt_standard_project_setup()

set(SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
set(MOUDLE_DIR ${SOURCE_DIR}/moudle)
set(UI_DIR ${PROJECT_SOURCE_DIR}/ui)
set(INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(VTK_DIR "C:/Program Files (x86)/VTK/include/vtk-9.4")
include_directories(${UI_DIR} ${VTK_DIR} ${SOURCE_DIR} ${INCLUDE_DIR} ${MOUDLE_DIR})

# 处理 .ui 文件
file(GLOB UI_FILES ${UI_DIR}/*.ui)
qt_wrap_ui(UI_HEADERS ${UI_FILES})
message(STATUS "UI_HEADERS: "${UI_HEADERS})

# 处理源文件和头文件
file(GLOB PROJECT_SOURCES 
    ${SOURCE_DIR}/main.cpp
)

file(GLOB MOUDLE_SOURCES 
    ${MOUDLE_DIR}/*.cpp
    ${INCLUDE_DIR}/*.h
)
list(APPEND PROJECT_SOURCES ${UI_HEADERS} ${MOUDLE_SOURCES})

正确的完整cmake写法

使用list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS ${UI_DIR})替换file(GLOB UI_FILES ${UI_DIR}/*.ui)qt_wrap_ui(UI_HEADERS ${UI_FILES})即可。

cmake_minimum_required(VERSION 3.16)
project(Usim LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_PREFIX_PATH "D:/Qt/Qt6.8.1/6.8.1/msvc2022_64")
set(CMAKE_AUTOUIC ON)

set(VERSION_MAJOR 2)
set(VERSION_MINOR 0)
set(VERSION_PATCH 1)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Charts)
qt_standard_project_setup()

# 设置源文件、头文件、ui文件路径
set(SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
set(SOURCE_MOUDLE_DIR ${SOURCE_DIR}/moudle)
set(SOURCE_UI_DIR ${SOURCE_DIR}/ui)
set(UI_DIR ${PROJECT_SOURCE_DIR}/ui)
set(INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(VTK_DIR "C:/Program Files (x86)/VTK/include/vtk-9.4")
include_directories(${UI_DIR} ${VTK_DIR} ${SOURCE_DIR} ${INCLUDE_DIR} ${SOURCE_MOUDLE_DIR} ${SOURCE_UI_DIR})
file(GLOB PROJECT_SOURCES 
    ${SOURCE_DIR}/main.cpp
    ${SOURCE_MOUDLE_DIR}/*.cpp
    ${SOURCE_UI_DIR}/*.cpp
)
file(GLOB INCLUDE_SOURCES 
    ${INCLUDE_DIR}/*.h
)
list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS ${UI_DIR})
list(APPEND PROJECT_SOURCES ${INCLUDE_SOURCES})
add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})

# 设置 CGNS 库
if(CMAKE_BUILD_TYPE MATCHES "Debug")
    set(CGNS_LIB_PATH "${PROJECT_SOURCE_DIR}/libs/debug")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
    set(CGNS_LIB_PATH "${PROJECT_SOURCE_DIR}/libs/release")
endif()
set(CGNS_LIBS 
    cgns libhdf5 libszip libzlib
)
foreach(cgns_lib ${CGNS_LIBS})
    add_library(${cgns_lib} STATIC IMPORTED)
    set_target_properties(${cgns_lib} PROPERTIES IMPORTED_LOCATION "${CGNS_LIB_PATH}/${cgns_lib}.lib")
endforeach()

# 设置 VTK 库
set(VTK_LIB_PATH "C:/Program Files (x86)/VTK/lib")
set(VTK_LIBS
    vtksys-9.4 vtkImagingCore-9.4 vtkIOImage-9.4 vtkGUISupportQt-9.4
    vtkCommonCore-9.4 vtkCommonDataModel-9.4 vtkCommonExecutionModel-9.4
    vtkFiltersCore-9.4 vtkFiltersGeneral-9.4 vtkFiltersGeometry-9.4 vtkFiltersModeling-9.4 vtkFiltersSources-9.4
    vtkRenderingCore-9.4 vtkRenderingAnnotation-9.4 vtkRenderingContext2D-9.4 vtkRenderingOpenGL2-9.4
    vtkInteractionStyle-9.4 vtkInteractionWidgets-9.4 vtkInteractionImage-9.4
)
if(CMAKE_BUILD_TYPE MATCHES "Debug")
    set(VTK_LIBS_DEBUG "")
    foreach(lib ${VTK_LIBS})
        list(APPEND VTK_LIBS_DEBUG "${lib}d")
    endforeach()
    set(VTK_LIBS ${VTK_LIBS_DEBUG})
endif()
foreach(vtk_lib ${VTK_LIBS})
    add_library(${vtk_lib} STATIC IMPORTED)
    set_target_properties(${vtk_lib} PROPERTIES IMPORTED_LOCATION "${VTK_LIB_PATH}/${vtk_lib}.lib")
endforeach()

# 链接库
target_link_libraries(${PROJECT_NAME}
    PUBLIC
        Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts
        ${CGNS_LIBS}
        ${VTK_LIBS}
)

# 定义翻译文件
set(TRANSLATIONS
    "${PROJECT_SOURCE_DIR}/translations/zh_CN.ts"
)
find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)
foreach(_ts_file ${TRANSLATIONS})
    execute_process(COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${_ts_file})
    execute_process(COMMAND ${LRELEASE_EXECUTABLE} ${_ts_file})
endforeach()

# 资源文件
qt_add_resources(PROJECT_SOURCES resources/Resource.qrc)

# 生成的是windows下的可执行文件
set_target_properties(${PROJECT_NAME}
    PROPERTIES
        WIN32_EXECUTABLE TRUE
)

标签:set,cmake,SOURCE,ui,下时,9.4,UI,DIR
From: https://www.cnblogs.com/sleeeeeping/p/18675357

相关文章

  • unity截屏(排除UI,按钮)
    在Unity中实现截屏但不希望截到按钮,可以通过以下几种方法来实现:方法一:使用特定相机进行截屏Unity允许你使用特定的相机进行截屏,这样可以避免截取到不需要的UI元素,比如按钮。具体步骤如下:创建一个新的相机:在Unity编辑器中,右键点击Hierarchy窗口,选择CreateEmpty,然后将其命名......
  • RevSuit:灵活而强大的反向连接平台
    免责声明本文旨在提供有关特定漏洞或安全工具的详细信息,以帮助安全研究人员、系统管理员和开发人员更好地理解和修复潜在的安全威胁,协助提高网络安全意识并推动技术进步,而非出于任何恶意目的。利用本文提到的漏洞信息或进行相关测试可能会违反法律法规或服务协议。作者不对读者......
  • 【C++】开源:ImGui图形用户界面库配置与使用
    项目介绍项目Github地址:https://github.com/ocornut/imguiDearImGui(ImGui)是一个开源的、用C++编写的图形用户界面(GUI)库。它由OCornut创建,旨在为应用程序和工具提供创建用户界面的简单高效的方式。以下是DearImGui的一些主要特性和特点:1.即时模式GUI:ImGui遵循即......
  • 【Eel库】用于制作类似 Electron 的离线 HTML/JS GUI 应用程序
    简介Eel是一个简单的Python库,用于制作类似Electron的离线HTML/JSGUI应用程序,并可以完全访问Python功能和库。Eel托管一个本地Web服务器,让您可以标注Python中的函数,以便从JavaScript调用它们,反之亦然。Eel旨在简化编写简短和简单的GUI应用程序的过......
  • nginxUI 安装及学习
    https://www.nginxwebui.cn/功能说明本项目可以使用WebUI配置nginx的各项功能,包括http协议转发,tcp协议转发,反向代理,负载均衡,ssl证书自动申请、续签、配置等,最终生成nginx.conf文件并覆盖nginx的默认配置文件,完成nginx的最终功能配置.本项目可管理多个nginx服务器......
  • 解决 spring boot 2.7.18 导入 flowable 6.8.1 报 Liquibase failed to start because
    解决springboot2.7.18导入flowable6.8.1报Liquibasefailedtostartbecausenochangelogcouldbefoundat'classpath:/db/changelog/db.changelog-master.yaml'.的办法 不论是导入<dependency><groupId>org.flowable</groupId><ar......
  • Stable Diffusion WebUI 最新版使用文档整理
    太久没用基本都忘光了,发现记的笔记也没有很好的梳理,虽然网上已经有了不少详细的文档了,但自己梳理一遍记忆比较深刻。本文转载自我的博客:https://blog.abyssdawn.com/archives/515.html已同步公众号环境准备$python--versionPython3.10.10$nvcc--versionnvcc:NVIDIA......
  • 费曼学习法解读:什么是UI
    UI呢,就像是一个房子的装修。 假如你有一个房子,UI就是把这个房子装修得漂漂亮亮、让人看着舒服又好用的东西。 比如说,你打开一个手机软件,那个软件的界面就是UI。界面上的各种图标啦、颜色啦、字体啦,这些组合在一起,让你一看就知道怎么用这个软件。 如果UI做得好,就像......
  • 基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要       在现代社会的众多场景中,如银行、车站、餐厅等,排队人数的统计对于资源分配、服务优化以及人员管理等方面具有极为重......
  • 新手指南 | 手把手教你快速安装WebUI,轻松开启AI创作之旅!
    什么是WebUI?WebUI是一款基于AI模型(如StableDiffusion)的用户界面工具,允许你轻松生成图片、设计艺术作品、甚至实现多样化的创意应用。(重点!它是开源的,免费的!!!)今天,我们为你准备了详细的新手安装教程,让你快速上手!一、准备工作:安装前的必要条件1.系统需求操作系统建议Wi......