cmake配置Qt工程

news2024/9/29 9:56:48

cmake 工程配置

# 指定版本和项目
cmake_minimum_required(VERSION 3.10)

set(TARGET_NAME labelDeviceView)
project(${TARGET_NAME} )

include(${CMAKE_CURRENT_LIST_DIR}/../../../../../../ossLib/ossLib/env.cmake)
set(CMAKE_PREFIX_PATH "D:/Qt6/6.5.2/msvc2019_64/")


set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)


find_package(Qt6 COMPONENTS Widgets REQUIRED)

file(GLOB LD_INC             "../../../include/*.*")
file(GLOB LD_SRC             "./main/*.cpp" )
file(GLOB LD_MAIN_HEADER    "./main/*.h")
file(GLOB LD_FORMS             "./main/*.ui")
file(GLOB LD_RESOURCES        
#main.qrc
)

#调用预编译器moc,需要使用 QT6_WRAP_CPP宏
QT6_WRAP_CPP(LD_MAIN_HEADER_MOC ${LD_MAIN_HEADER})
QT6_WRAP_UI(LD_FORMS_HEADERS ${LD_FORMS})
QT6_ADD_RESOURCES(LD_RESOURCES_RCC ${LD_RESOURCES})

include_directories(./)
include_directories(../../../include/)
include_directories(./main)

link_directories(${CMAKE_CURRENT_LIST_DIR}/../../../libs/${os}/${platform})

SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR}/../../../bin/${os}/${platform})


add_executable(${TARGET_NAME} 
    ${LD_SRC} 
    #${LD_MAIN_HEADER_MOC} 
    ${LD_MAIN_HEADER}
    ${LD_FORMS_HEADERS}
    ${LD_FORMS}
    ${LD_RESOURCES_RCC}
    ${LD_RESOURCES}
)

target_link_libraries(${TARGET_NAME} ${Qt5Widgets_LIBRARIES}  ${Qt5Charts_LIBRARIES} ${Qt5OpenGL_LIBRARIES})


# 配置命令行参数
set_property(TARGET  ${TARGET_NAME} PROPERTY   VS_DEBUGGER_COMMAND    "./labelDeviceView.exe")
set_property(TARGET  ${TARGET_NAME} PROPERTY   VS_DEBUGGER_COMMAND_ARGUMENTS    "./config/labelDriver.cfg")
set_property(TARGET  ${TARGET_NAME} PROPERTY   VS_DEBUGGER_WORKING_DIRECTORY    "$(OutDir)/")
set_property(TARGET  ${TARGET_NAME} PROPERTY   VS_DEBUGGER_ENVIRONMENT    "")        


target_link_libraries(${TARGET_NAME} PRIVATE ${Qt6Widgets_LIBRARIES} Qt6::Widgets)
target_link_libraries(${TARGET_NAME} PRIVATE optimized ossLib debug ossLibd )
target_link_libraries(${TARGET_NAME} PRIVATE optimized labelUi    debug labelUid)

add_dependencies(${TARGET_NAME} "logFile.drv")

set_target_properties (${TARGET_NAME} PROPERTIES
FOLDER "testMain"
)

INSTALL(TARGETS ${TARGET_NAME}
   RUNTIME DESTINATION lib
   LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
)

metaObject的相关链接无法找到的问题,如下图:

2>mainwindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UEBAPEBUQMetaObject@@XZ)

2>mainwindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __cdecl MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UEAAPEAXPEBD@Z)

2>mainwindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)

2>mainwindow.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl MainWindow::initDrivers(void)" (?initDrivers@MainWindow@@QEAAXXZ),函数 "public: __cdecl MainWindow::MainWindow(char const *,class QWidget *)" (??0MainWindow@@QEAA@PEBDPEAVQWidget@@@Z) 中引用了该符号

2>mainwindow.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const MainWindow::staticMetaObject" (?staticMetaObject@MainWindow@@2UQMetaObject@@B)

2>E:\gitee\Development\C++\labelDriver\labelDriver4.0\labelDriver\bin\windows\x64\Debug\labelDeviceView.exe : fatal error LNK1120: 5 个无法解析的外部命令

 

这个问题的原因是因为没有生成对应的Moc文件,或者moc文件为空。没有生产Moc文件是因为对应的开关没有开,配置:

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

并且在对应的类中天界Q_OBJECT声明。

Moc文件为空则需要考虑加入QT6_WRAP_CPP(LD_MAIN_HEADER_MOC ${LD_MAIN_HEADER})的文件是否正确,要特别注意${LD_MAIN_HEADER}只能加入头文件,不能包含cpp文件,否则就可能导致moc文件为空。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程复制fork详解 僵尸进程 孤儿进程 写时拷贝技术 缓冲区

fork函数讲解 进程复制fork基本使用简单分页 逻辑页 物理页 页表fork的三个面试练习题缓冲区僵死进程孤儿进程写时拷贝 进程替换exexc 介绍简易命令解释器strtok()函数讲解 进程复制 fork基本使用 父进程fork后,新的进程产生,新的进程就继续从fork往后的…

Spring集成Web

目录 1、简介 2、监听器 3、Spring提供的listener 3.1、xml 3.2、配置类 3.3、WebApplicationContextUtils 3.4、说明 4、自己复现的listener 4.1、ContextLoaderListener 4.2、WebApplicationContextUtils 4.3、Web调用 ⭐作者介绍:大二本科网络工程专业…

Less is More: Focus Attention for Efficient DETR

摘要 类似detr的模型显著提高了探测器的性能,甚至优于经典的卷积模型。然而,在传统的编码器结构中,所有的标记都带来了冗余的计算负担。最近的稀疏化策略利用了信息标记的一个子集,通过稀疏编码器来降低注意力的复杂性&#xff0…

观测,让运维更简单!龙蜥社区系统运维 MeetUp 等你报名

为了让广大社区用户和开发者近距离感受 Linux 和 eBPF 技术的魅力,龙蜥社区系统运维于 08 月 12 日在杭州举行 MeetUp 。过去,系统运维 SIG 和大家一起交流了 eBPF 在安全和网络的最佳应用和实践,以及 Linux 在手机和服务器上的运维经验等技术…

深度学习训练营之CGAN生成手势图像

深度学习训练营之CGAN生成手势 原文链接CGAN简单介绍环境介绍前置工作数据导入所需的包加载数据创建数据集查看数据集 模型设置初始化模型的权重定义生成器构造判别器 模型训练定义损失函数设置超参数正式开始训练 结果可视化 原文链接 🍨 本文为🔗365天…

leetcode 763. 划分字母区间

2023.8.3 本题的关键是要确保同一字母需要在同一片段中,而这就需要关注到每个字母最后一次出现的位置。 思路:用一个哈希表保存每个字母(26个)最后一次出现的位置。然后从头遍历,不断更新最右边界,直到当前…

LLVM笔记1

参考:https://www.bilibili.com/video/BV1D84y1y73v/?share_sourcecopy_web&vd_sourcefc187607fc6ec6bbd2c74a3d0d7484cf 文章目录 零、入门名词解释1. Compiler & Interpreter2. AOT静态编译和JIT动态解释的编译方式3. Pass4. Intermediate Representatio…

Eureka增加账号密码认证登录

一、业务背景 注册中心Eureka在微服务开发中经常使用到,用来管理发布的微服务,供前端或者外部调用。但是如果放到生产环境,我们直接通过URL访问的话,这显然是不安全的。 所以需要给注册中心加上登录认证。 通过账号和密码认证进行…

openGauss学习笔记-30 openGauss 高级数据管理-别名

文章目录 openGauss学习笔记-30 openGauss 高级数据管理-别名30.1 语法格式30.1.1 列别名语法30.1.2 表别名语法 30.2 参数说明30.3 示例 openGauss学习笔记-30 openGauss 高级数据管理-别名 SQL可以重命名一张表或者一个字段的名称,这个名称为该表或该字段的别名。…

Spring:JDBCTemplate

JDBCTemplate 概述 概述 JDBC(Java DataBase Connectivity,Java 数据库连接), 一 种用于执行 SQL 语句的 Java API(Application Programming Interface , 应用程序设计接口 ),可以为…

【每日一题】—— C. Mocha and Hiking(Codeforces Round 738 (Div. 2))

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

IO流【笔记】

1. IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢&a…

软件开发过程中前后端联调相关问题

一、接口调用三步曲 1. uniapp接口调用 data中定义 onload中调用 例如:this.getSwiperList()//调用获取轮播图数据的方法 method中定义获取方法 2. 微信小程序接口调用 reques.js中接口封装 如:ScenicspotInfo (data)> re…

高级web前端开发工程师的岗位职责最新(合集)

高级web前端开发工程师的岗位职责最新1 职责: 1.主导公司前端开发的技术方向,指导其他前端开发人员工作 2.负责产品的Web前端开发及用户交互体验设计; 3.基于HTML、CSS、JavaScript标准进行页面制作,编写界面组件; 4.协同后台开发工程师&…

8.4 day05软件学习

文章目录 微服务的概念微服务的原则微服务的特征:集群介绍 spring aop 在家学习效率真不高,下午好兄弟喊出去玩,一直到晚上才回来,赶紧总结一下早上学习的内容。 继续看java基础进阶的思想,之前学的很多都忘了。 微服…

网工内推 | 实施、售后工程师,厂商认证优先

01 安井食品集团股份有限公司 招聘岗位:网络工程师 职责描述: 1.负责集团组网的网络规划、实施、维护工作; 2.负责公司局域网的网络规划、实施、维护工作; 3.负责公司企业安全系统规划、实施、维护工作; 4、负责公…

百度UEditor编辑器如何关闭抓取远程图片功能

百度UEditor编辑器如何关闭抓取远程图片功能 这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发&a…

LT6711A 是一款HDMI 2.0转DP 1.2/EDP 1.4的芯片,实用于AR或者PC以及PAD

LT6711A 1.概述: Lontium LT6711A是HDMI2.0到DP1.2转换器,内部有c型替代模式开关和PD控制器。对于HDMI输入,LT6711A具有一个HDMI2.0接收器,有1个时钟通道和3个数据通道,每个数据通道最大运行6Gb/s,最大输…

DAY02_Spring第三方资源配置管理Spring容器Spring注解开发Spring整合Mybatis和Junit

目录 一 第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池1.2 管理c3p0连接池 2 加载properties属性文件问题导入2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 二 Spring容器1 Spring核心容器介绍问题导入1.1 创建容器1.2 获取bean…

智能汽车驾驶演进:虚拟ECU种类与优劣分析

现代汽车更安全、更舒适、更智能的代价是车载ECU(Electronic Control Unit)数量的迅速增长,与之相对应的是ECU上规模软件越来越大、软件开发成本在整车制造成本中的占比越来越高。车企可以从规则与方法两个角度入手来解决上述问题&#xff1a…