cmake配置Qt工程

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.rhkb.cn/news/75680.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“Why Should I Trust You?” Explaining the Predictions of Any Classifier阅读笔记

“Why Should I Trust You?” Explaining the Predictions of Any Classifier阅读笔记 1. 论文贡献2. 背景 [ 1 ] ^{[1]} [1]3. LIME解释单个样本3.1 总体思想3.2 构建可解释的数据表示 [ 1 ] ^{[1]} [1]3.3 可解释性和忠实度的权衡3.4 局部采样3.5 稀疏线性解释3.6 使用SVM进…

电脑选睡眠、休眠还是关机?

关机 这是大家最熟悉的。关机时,系统首先关闭所有运行中的程序,然后关闭系统后台服务。随后,系统向主板请求关机,主板断开电源的供电使能,让电源切断对绝大多数设备的供电(只剩一些内部零件仍会维持电源供应…

测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 测试新人在想什么…

软件测试需求分析的常用方法

软件测试需求分析时,应要求产品人员对需求进行讲解,并使用相对应的方法进行科学分析,否则无法保障软件测试的完整性和科学性,从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法: 1、功能分解…

基于 FFlogs API 快速实现的 logs 颜色查询小爬虫

文章目录 找到接口解析响应需要平均颜色和过本次数? 找到接口 首先试了一下爬虫,发现和wow一样官网上有暴露的 API,链接在:FFlogs v1 API 文档链接 通过查询官方提供的 API 接口得知: user_name 角色名字 api_key …

详解 HashMap 的底层实现原理

作为一名程序员,你可能经常使用 HashMap 这个重要的数据结构,但你对它的底层实现原理可能不够了解。本文将通过图文结合的方式,为你详细解析 HashMap 的底层实现原理,并回答一些常见问题,让你能够更好地理解和应用 Has…

【科普知识】了解电机T型速度曲线和S型速度曲线的区别!

当电机从静止状态启动并加速到额定转速时,其速度变化并非线性的,而是呈现出不同的曲线特征。T型速度曲线和S型速度曲线是两种典型的电机加速曲线类型。那它们之间有什么区别呢?今天,就让我们来深入探讨电机加速曲线的奥秘。 电机速…

uni-ajax网络请求库使用

uni-ajax网络请求库使用 uni-ajax是什么 uni-ajax是基于 Promise 的轻量级 uni-app 网络请求库,具有开箱即用、轻量高效、灵活开发 特点。 下面是安装和使用教程 安装该请求库到项目中 npm install uni-ajax编辑工具类request.js // ajax.js// 引入 uni-ajax 模块 import ajax…

【无标题】一篇文章带你彻底理解Java ArrayList数据结构详解

一篇文章带你彻底理解Java ArrayList数据结构详解 基本概念: ​ **之前创建数组的时候,需要声明提前声明数组的大小,**ArrayList是一个可以动态修改的数组,与普通数组的区别就是没有固定大小的限制,它会动态调整长度…

iphone卡在恢复模式怎么办?修复办法分享!

iPhone 卡在恢复屏幕问题是 iPhone 用户在软件更新或恢复期间的常见问题。如果你也遇到此问题,不要着急,接下来我们将探讨 iPhone 卡在恢复屏幕上的主要原因,以及如何轻松修复它。 iPhone卡在恢复屏幕问题上没有一个特别的原因,但…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(一)

【前端实习生备战秋招】—HTML 和 CSS面试题总结(一) 1. 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE:trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto内核,Opera现已改用Goo…

网络安全设备-等保一体机

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元(安全网元包括:防火…

Spark写PGSQL分区表

这里写目录标题 需求碰到的问题格式问题分区问题(重点) 解决完整代码效果 需求 spark程序计算后的数据需要往PGSQL中的分区表进行写入。 碰到的问题 格式问题 使用了字符串格式,导致插入报错。 val frame df.withColumn("insert_t…

Go语言开发者的Apache Arrow使用指南:读写Parquet文件

Apache Arrow是一种开放的、与语言无关的列式内存格式,在本系列文章[1]的前几篇中,我们都聚焦于内存表示[2]与内存操作[3]。 但对于一个数据库系统或大数据分析平台来说,数据不能也无法一直放在内存中,虽说目前内存很大也足够便宜…

【数据挖掘竞赛】——科大讯飞:锂离子电池生产参数调控及生产温度预测挑战赛

🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ ​ 【科大讯飞】报名链接:https://challenge.xfyun.cn?invitaC…

【ChatGLM_02】LangChain知识库+Lora微调chatglm2-6b模型+提示词Prompt的使用原则

经验沉淀 1 知识库1.1 Langchain知识库的主要功能(1) 配置知识库(2) 文档数据测试(3) 知识库测试模式(4) 模型配置 2 微调2.1 微调模型的概念2.2 微调模型的方法和步骤(1) 基于ptuning v2 的微调(2) 基于lora的微调 3 提示词3.1 Prompts的定义及原则(1) Prompts是什么&#xf…

CentOS7忘记密码如何重置

忘记密码重置步骤: 1、重启系统,当系统进入引导界面时,按e键。就可以编辑引导选项,在引导选中加入参数rd.break,如图所示: 2、编辑完引导选项后,按Ctrlx组合键引导系统进入紧急模式&#xff0c…

关于CORS的笔记

CORS目录 一、SpringBoot 跨域设置二、CORS(1)总结的图如下(2)简单请求满足的条件(3)响应头(4)请求头(5)使用XMLHttpRequest进行跨域访问1. Access-Control-A…

DEVICENET转ETHERNET/IP网关devicenet协议

捷米JM-EIP-DNT,你听说过吗?这是一款自主研发的ETHERNET/IP从站功能的通讯网关,它能够连接DEVICENET总线和ETHERNET/IP网络,从而解决生产管理系统中协议不同造成的数据交换互通问题。 这款产品在工业自动化领域可谓是一大利器&…

springboot()—— swagger

零、一张图读懂swagger 懂了,这玩意就是用swagger搞出来的! 就是一个后端开发自测的东西嘛! 一、概念 存在即合理,我们看一下swagger诞生的原因:在前后端分离的架构中,前端新增一个字段,后端就…