CMake+qt+Visual Studio

news/2024/5/6 22:07:42

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程,使用Visual Studio 开发

##使用qt Creator 创建CMake项目  

  和创建pro工程的步骤一致,只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同

工程新建完成之后,构建cmake 项目,保证项目被正确的构建。

  在qt creator 自动生成的CMakeLists.txt 上做了修改,添加了自动寻找头文件、源文件和ui文件

当前文件夹是CMakeLists.txt 的同级目录

cmake_minimum_required(VERSION 3.5)project(cmakeTest VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)#添加源文件 头文件 和ui文件
FILE(GLOB SRC_FILES "./*.cpp" "../cmakeTest_Build/*.cpp")
FILE(GLOB HEAD_FILES "./*.h" "./cmakeTest_Build/*.h")
FILE(GLOB UI_FILES "./*.ui" "../cmakeTest_Build/*.ui")
#可以不设置
#qt5_wrap_ui(WRAP_UI ${UI_FILES})if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)qt_add_executable(cmakeTestMANUAL_FINALIZATION${HEAD_FILES}${SRC_FILES})
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET cmakeTest APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()if(ANDROID)add_library(cmakeTest SHARED${HEAD_FILES}${SRC_FILES}${UI_FILES})
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")else()add_executable(cmakeTest${HEAD_FILES}${SRC_FILES}${UI_FILES})endif()
endif()target_link_libraries(cmakeTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.cmakeTest)
endif()
set_target_properties(cmakeTest PROPERTIES${BUNDLE_ID_OPTION}MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)include(GNUInstallDirs)
install(TARGETS cmakeTestBUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)if(QT_VERSION_MAJOR EQUAL 6)qt_finalize_executable(cmakeTest)
endif()

##使用cmake_gui 构建出sln 工程

依次操作1,2,3,4

1.设置CMakeLists.txt 所在的目录

2.设置build 目录 生成visual studio 可以打开的sln,以及整个项目的构建过程

3.configure 配置visual studio 工具,选择生成的平台,(点击之后如果有红色在5处出现,再次点击config,直到消失,如果是下方的空白处有红色就需要根据提示修改CMakeLists.txt文件)

4.configure 完成之后 点击Generate 

操作完成!!!

##使用visual studio 打开cmake 构建目录下的sln 文件,解决 方案资源管理器中有好几个项目选择指定的工程名的项目作为启动项,否在编译会出现

设置启动项之后成功运行。

##在visual studio 项目中添加文件,添加文件设置文件的位置和CMakeLists.txt同一级目录,方便拷贝代码。添加完成之后,运行会提示ui_XX.h 找到不到 

重复 cmake_gui 构建出sln 工程 的3,4 步骤,visual 提示

点击全部重新加载,点击运行成功编译.

添加文件每次都需要使用cmake 重新构建,暂时没有找到好的方法

add: 在CMakeLists.txt的上一级目录添加.bat 脚本

rem @echo 不显示命令在命令行窗口上 echo 显示
echo off
rem 改批处理文件rem 获取批处理文件的名称(不包括路劲)
set "file_name=%~nx0"
rem 去除批处理文件的后缀
for %%F in ("%file_name%") do set "file_name_no_ext=%%~nF"set "file_name_build=%file_name_no_ext%_build"
rem :: 表示当前行为注释 不执行
::delete %file_name_build% 
if "%1"=="delete" goto _DELif not exist %file_name_build% md %file_name_build%
cd %file_name_build%
cmake -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release ../%file_name_no_ext%
cd ..
goto _END
echo %file_name_no_ext%:_DEL
rd /S /Q %file_name_build%:_END
pause


http://www.mrgr.cn/p/76008415

相关文章

ClkLog实践中的挑战:如何设计和实施有效的埋点指标

埋点的学名应该叫做事件追踪(Event Tracking),它主要是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。 埋点是为了满足快捷、高效、丰富的数据应用而做的用户行为过程及结果记录。埋点所采集的数据可以分析网站/APP的使用情况,用户行为习惯等,是建立…

MyBatis 动态 SQL 最全教程,这样写 SQL 太优雅了!

一、MyBatis动态 sql 是什么 动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。 例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 S…

【Qt 专栏】Qt:SQLite数据库操作示例

转载自:https://blog.csdn.net/qq_40344790/article/details/129521573 作者:DevFrank (CSDN C/C++ 优质创作者) 1. sqlite介绍 SQLite 是一种轻量级的嵌入式关系型数据库管理系统,它是一个开源的、零配置的、自包含的、事务性的 SQL 数据库引擎。SQLite 的设计目标是简单…

SQL Server实战二:创建、修改、复制、删除数据库表并加以数据处理

本文介绍基于Microsoft SQL Server软件,实现数据库表的创建、修改、复制、删除与表数据处理的方法~本文介绍基于Microsoft SQL Server软件,实现数据库表的创建、修改、复制、删除与表数据处理的方法。 目录1 交互式创建数据库表T2 交互式创建数据库表S3 T-SQL创建数据库表C4 …

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高,而且过程比较复杂,涉及的步骤非常多,有一定难度,可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…

node学习

1 走的是commenJs的规范(模块儿化)a.js<a 每个都有自己的模块,都有作用域<b 在模块儿内modul变量都代表自己本身<c modul.exports提供对外接口require语法 /代表绝对路径,./代表相对路径默认后缀:js json noderequire(http) ——》对应node_modules 2 有一…

集池库:新时代上班族兼职的新选择

近年来,互联网的迅猛发展为个人提供了诸多机遇,使他们能够通过发掘自身技能并在网络上拓展收入渠道。在这个充满活力的数字时代,我也深感这种变革所带来的机会。首先,互联网时代提供了许多平台和机会来实现灵活的兼职工作。例如,网络直播平台是一个热门的选择。通过直播平…

如何通过供应商协同平台,保障数据安全流转并提高生产效率?

在“降本增效”为主旋律的市场环境下,与供应商保持紧密协同,严格把控成本、降低风险成为企业关注的重点之一。越来越多的企业有意识去建设供应商协同平台,需要考虑安全性、易用性、管理难度、经济成本等。在供应商管理中一般会面临以下问题: 1、内外协同困难 采供双方沟通频…

如何快速学习盲打键盘的指法

学习盲打键盘的指法需要一定的时间和练习&#xff0c;但是以下几个方法可以帮助你加快学习的速度&#xff1a; 掌握正确的手位&#xff1a;了解标准的键盘布局以及手指应该放置的位置是学习盲打的第一步。在QWERTY键盘上&#xff0c;你的左手应该放在ASDF键上&#xff0c;右手应…

阿里云边缘容器云帮助AI推理应用快速落地

近日,阿里云技术专家徐若晨在全球分布式云大会上,分享了《边缘容器云助力AI推理高效落地》的主题演讲,分享了阿里云边缘容器云如何助力开发者实现更快速的AI推理应用的迭代和部署。此外,他还分享了边缘AI推理应用在实际业务中的应用案例。 终端算力上移 云端算力下沉客户在…

Android Studio实现内容丰富的安卓养老平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 158安卓养老 1.开发环境 后端用springboot框架&#xff0c;安卓的用android studio开发android stuido3.6 jak1.8 idea mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登…

CSS详解(二)

接上篇CSS详解&#xff08;一&#xff09;-CSDN博客 1、网页布局本质 网页布局的本质是通过 CSS 将各种 HTML 元素&#xff08;即“盒子”&#xff09;摆放到页面中合适的位置。这包括设置元素的尺寸、位置、边距、填充、对齐方式、浮动等。这些盒子通过 CSS 的各种布局机制进…

MemFire案例-政务应急物联网实时监测预警项目

客户背景 党的十八大以来&#xff0c;中央多次就应急管理工作做出重要指示&#xff1a;要求坚持以防为主、防抗救相结合&#xff0c;全面提升综合防灾能力&#xff1b;坚持生命至上、安全第一&#xff0c;完善安全生产责任制&#xff0c;坚决遏制重特大安全事故。 面对新形势…

网络爬虫之HTTP原理

** URI和URL URI的全称Uniform Resource Identifier &#xff0c;即统一资源标志符。URL的全称Uniform Resource Locator 即统一资源定位符。 URL是URI的子集&#xff0c;也就是每一个URL就是URI&#xff0c;但是每一个URI不一定是URL&#xff0c;URI还有一个子类叫URN&#x…

不谈虚的,平台即产品真的有那么好吗?

从开发者角度看PaaP,会关注哪些点?随着信息技术的高速发展,我们每隔一段时间就能看到一个热门术语在各大平台被分析和讨论。当我们上搜索引擎搜索相关词条,就会找到大量与该技术优势、亮点相关的文章。特别是“平台即产品”(PaaP)策略,其在实际应用中的利用价值和效用性…

excel文件导入dbeaver中文乱码

1.将excel文件进行另存为&#xff0c;保存类型选择【CSV】 2.选择【工具】–>【web选项】–> 【编码】–> 【简体中文&#xff08;GB18030&#xff09;】 3.在DBeaver进行数据导入 直接导入应该就可以&#xff0c;如果不行的话按下面处理。 选择【导入数据——选择cs…

四川易点慧电子商务:抖音小店引领潮流,先进模式打造电商新标杆

在当下数字化浪潮中&#xff0c;电子商务行业如日中天&#xff0c;四川易点慧电子商务有限公司以其独特的视角和前瞻性的战略布局&#xff0c;成功在抖音小店领域崭露头角&#xff0c;成为行业内的佼佼者。本文将深入剖析四川易点慧电子商务的成功秘诀&#xff0c;以及其在抖音…

dotnet 使用 MSTestRunner 将单元测试制作为独立可执行文件

以往的单元测试都是不能单独作为一个独立的可执行文件跑的,需要在 VisualStudio 或 VSTest 或 dotnet test 里面运行。这就限制了运行单元测试的环境了,有时候开发者可能期望在无 SDK 或开发环境下执行单元测试,这时就可以用到本文介绍的 MSTestRunner 功能,将单元测试制作…

为 IIncrementalGenerator 增量 Source Generator 源代码生成项目添加单元测试

本文属于 IIncrementalGenerator 增量 Source Generator 源代码生成入门系列博客,本文将和大家介绍如何为源代码生成项目添加单元测试添加单元测试的作用不仅可以用来实现通用的单元测试提高质量的功能,还能用来辅助调试 IIncrementalGenerator 增量 Source Generator 源代码…