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文件为空。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis核心 - SqlSession如何通过Mapper接口生成Mapper对象

书接上文 MyBatis – 执行流程 我们通过SqlSession获取到了UserMapper对象,代码如下: // 获取SqlSession对象 SqlSession sqlSession sqlSessionFactory.openSession();// 执行查询操作 try {// 获取映射器接口UserMapper userMapper sqlSession.get…

第3章 数据和C

本章介绍以下内容: 关键字:int 、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary 运算符:sizeof() 函数:scanf() 整数类型和浮点数类型的区别 如何书写整型和浮点型常数,如何声明这些类型的…

计蒜客T1116——验证子串

C实现验证子串的功能:今天复习了一下数据结构的串部分的内容,突然想起来子串匹配的实现,于是计蒜客随便找一道题写一下,核心的代码为裁剪子串和字符串比较两个内容,建议理解背诵,考研大概率会考。 子串裁剪 string Sf…

小鱼深度产品测评之:阿里云容器服务器ASK,一款不需购买节点,即可直接部署容器应用。

容器服务器ASK测评 1、引言2、帮助文档3、集群3.1集群列表3.1.1 详情3.1.1.1概览 tab3.1.1.2基本信息 tab3.1.1.4集群资源 tab3.1.1.5 集群日志 tab3.1.1.6 集群任务 tab 3.1.2 应用管理3.1.2.1 详情3.1.2.2 详情3.1.2.3 伸缩3.1.2.4 监控 3.1.3 查看日志3.1.3.1 集群日志3.1.3…

AcWing 24:机器人的运动范围 ← BFS、DFS

【题目来源】https://www.acwing.com/problem/content/description/22/【题目描述】 地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。 一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上&#…

nginx服务

web服务: 国外主流的网站服务还是apache 国内主流的网站服务是:nginx Nginx网站服务 nginx是一个高性能、轻量级的web服务软件。 nginx的特点: 1.稳定性相对较高。(但是没有apache稳定) 2.系统资源消耗低。体现在处理h…

“科创中国”青百会轮值主席吴甜:以大语言模型为代表的AI将引发产业变革

8月1日,“科创中国”青年百人会(后文简称青百会)联合百度举办“青创汇”高端对话,围绕人工智能技术创新与产业发展交流研讨,同时正式成立“科创中国”青年百人会女性工作委员会。该委员会将鼓励更多女性投身科技创新事…

如何隐藏开源流媒体EasyPlayer.js视频H.265播放器的实时录像按钮?

目前我们TSINGSEE青犀视频所有的视频监控平台,集成的都是EasyPlayer.js版播放器,它属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,包括WebSocket-FLV、HTTP-FLV,HLS(m3u8&#x…

S7-200SMART与ET200SP远程IO模块进行PROFINET通信的具体方法

S7-200SMART与ET200SP远程IO模块进行PROFINET通信的具体方法 使用前提: 只有标准型且固件版本为V2.4及以上的S7-200 SMART CPU才支持 PROFINET 控制器功能。 S7-200 SMART 作 PROFINET 控制器最多可带8个 IO 设备(例如:远程 IO、阀岛、变频器、伺服和机器人等)。 本例中以 …

【C# 基础精讲】为什么选择C# ?

C#(C Sharp)是由微软开发的一种通用、面向对象的编程语言。它最初于2000年发布,自那时以来逐渐成为开发者的首选之一。C#的设计目标是提供一种简单、现代、可靠且安全的编程语言,使开发者能够轻松构建各种类型的应用程序。 为什么…

Element-plus中tooltip 提示框修改宽度——解决方案

tooltip 提示框修改宽度方法&#xff1a; 在element中&#xff0c;想要设置表格的内容&#xff0c;超出部分隐藏&#xff0c;鼠标悬浮提示 可以在el-table 上添加show-overflow-tooltip属性 同时可以通过tooltip-options配置提示信息 如下图代码 <el-tableshow-overflo…

Cocos creator(2d) 使用 shader + uv 实现单张图片衔接滚动效果

在游戏中&#xff0c;当我们需要让背景图片无缝衔接无限滚动时(打飞机这种背景一直滚动&#xff0c;或者肉鸽游戏地图一直在走等等)&#xff0c;通常的做法是 在游戏中放两个背景node&#xff0c;在update中控制这两张背景图片的移动&#xff0c;并让其收尾衔接即可。(具体代码…

EXCEL,多条件查询数字/文本内容的4种方法

目录 1 问题&#xff1a;如何根据多条件查询到想要的内容 2 方法总结 2.1 方法1&#xff1a; sumif() 和sumifs() 适合查找符合条件的多个数值之和 2.2 方法2&#xff1a;使用lookup(1,0/((区域1条件1)*(区域2条件2)*....),结果查询区域) 2.3 方法3&#xff1a;使用 ind…

19-2.vuex

目录 1 安装 2 挂载 2.1 vue2写法 2.2 vue3写法 3 state 3.1 声明数据 3.2 使用数据 3.3 处理数据 4 mutations 4.1 基本使用 4.2 传递参数 4.3 mutations中不能写异步的代码 5 actions 5.1 基本使用 5.2 传递参数 6 getters Vuex是做全局数据…

论文阅读- Uncovering Coordinated Networks on Social Media:Methods and Case Studies

链接&#xff1a;https://arxiv.org/pdf/2001.05658.pdf 目录 摘要&#xff1a; 引言 Methods Case Study 1: Account Handle Sharing Coordination Detection 分析 Case Study 2: Image Coordination Coordination Detection Analysis Case Study 3: Hashtag Sequen…

LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 论文阅读

论文信息 题目&#xff1a;LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 作者&#xff1a;Devendra Singh Chaplot, Dhiraj Gandhi 项目地址&#xff1a;https://devendrachaplot.github.io/projects/Neural-SLAM 代码地址&#xff1a;https://github.com/devendrachaplot/N…

【Spring】(三)Spring 使用注解存储和读取 Bean对象

文章目录 前言一、使用注解储存 Bean 对象1.1 配置扫描路径1.2 类注解储存 Bean 对象1.2.1 Controller&#xff08;控制器存储&#xff09;1.2.2 Service&#xff08;服务储存&#xff09;1.2.3 Repository&#xff08;仓库存储&#xff09;1.2.4 Component&#xff08;组件储存…

【java安全】原生反序列化利用链JDK7u21

文章目录 【java安全】原生反序列化利用链JDK7u21前言原理equalsImpl()如何调用equalsImpl()&#xff1f;HashSet通过反序列化间接执行equals()方法如何使hash相等&#xff1f; 思路整理POCGadget为什么在HashSet#add()前要将HashMap的value设为其他值&#xff1f; 【java安全】…

真我V3 5G(RMX2200 RMX2201)解锁刷机全过程

安卓系统新Rom包为GSI&#xff0c;更具有通用性&#xff0c;可以比较放心刷。 原厂系统垃圾多、广告多&#xff0c;甚至热点功能不支持ipv6&#xff0c;严重偏离热点机的定位。 主要参考 https://www.bilibili.com/read/cv20730877/https://www.bilibili.com/read/cv2073087…

Unity 引擎做残影效果——3、顶点偏移方式

Unity实现残影效果 大家好&#xff0c;我是阿赵。 继续讲Unity引擎的残影做法。这次的残影效果和之前两种不太一样&#xff0c;是通过顶点偏移来实现的。 具体的效果是这样&#xff1a; 与其说是残影&#xff0c;这种效果更像是移动速度很快时造成的速度线&#xff0c;所以在移…