CMake+qt+Visual Studio

#使用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.mzph.cn/bicheng/3406.shtml

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

相关文章

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中,提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了,询问公司开发也不知道如何处理,我是如何重启kafka消息中间件使system系统服务正常运行? 查看kafka的安装位置 在下面的…

WPF —— MVVM架构

1 什么是MVVM? MVVM是一种软件架构模式,它将应用程序分为三个层次 model(数据模型),view(视图),viewmodel(视图模型) model:表示应用程序当中数…

SpringCloud之Feign集成Ribbon

Feign定义【可跳过】 Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为“假装,伪装,变形”,是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求&#x…

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍,恢复因丢失的连接,网络问题,计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器,以使用独特的“高级浏…

视频改字祝福 豪车装X系统源码uniapp前端源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 uniapp视频改字祝福 豪车装X系统源码 全开源。 创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝福视频不再难! 想要为你的…

RealSenseSR300工程环境配置说明

新建目录结构如下: output:存储可执行文件.exe等src:存储源码.cpp .h等3rdparty:存储第三方库 opencv等 其中将源码按照main及其相关文件分为以下三类 vs2015许可证到期后先激活,激活码很多网上有,如:HMGNV-WCYXV-X7G9W-YCX63…

2024.4.25

#include <iostream> #include <iomanip> using namespace std; class Person{const string name;int age;char sex; public:Person(const string name):name(name){cout << "第一个Person构造函数" << endl;}Person():name("zhangsan&…

3.7设计模式——Observer 观察者模式(行为型)

意图 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于他的对象都得到通知并被自动更新。 结构 Subject&#xff08;目标&#xff09;知道它的观察者&#xff0c;可以有任意多个观察者观察同一个目标&#xff0c;提供注册和删…

快速入门基础控制台API

目录 一、什么是win32API 二、API基础函数介绍 2.1控制台基础命令 2.1.1标题修改 2.1.2长宽修改 2.1.3坐标 2.2GetStdHandle 2.3GetConsoleCursorInfo 2.4SetConsoleCursorInfo 2.5SetConsoleCursorPosition 2.6GetAsyncKeyState 三、API函数综合应用 3.1设置光标…

IDEA-关于idea在import类时,代码报红的解决方法,找不到包

关于idea在import类时&#xff0c;代码报红的解决方法_idea import报红-CSDN博客

软件企业质量保证的基石――QA,QC的良性协作

软件企业质量保证的基石――QA、QC的良性协作 国内的软件产业发展了20多年的时间&#xff0c;已经由个人英雄时代步入到中、小团队协作时代。相信不久的将来&#xff0c;国内一定会出现航母级的软件企业&#xff0c;那时候我们会迎来集团军作战的时代。不同的时代表明软件规模…

Pandas 2.2 中文官方教程和指南(二十五·二)

新列 使用 DataFrame.map&#xff08;以前称为 applymap&#xff09;高效动态创建新列 In [53]: df pd.DataFrame({"AAA": [1, 2, 1, 3], "BBB": [1, 1, 2, 2], "CCC": [2, 1, 3, 1]})In [54]: df Out[54]: AAA BBB CCC 0 1 1 2 1…

用html写一个旋转菜单

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>旋转菜单</title><link relstylesheet href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"&…

Linux操作

一&#xff1a;各类操作快捷键 Ctrl c强制停止程序运行用于删除命令&#xff0c;执行出错时使用Ctrl d退出或者登出用于退出Linux账户 | 退出Linux自带的Python模式(命令框输入&#xff1a;python进入)history查看历史命令用于查看历史命令Ctrl r历史命令搜索进入后面在 内…

树莓派学习笔记--串口通信(配置硬件串口进行通信)

树莓派串口知识点 树莓派4b的外设一共包含两个串口&#xff1a;硬件串口&#xff08;/dev/ttyAMA0&#xff09;,mini串口&#xff08;/dev/ttyS0&#xff09; 硬件串口由硬件实现&#xff0c;有单独的波特率时钟源&#xff0c;性能高&#xff0c;可靠&#xff1b;而mini串口性能…

分享6款嵌入式常见的GUI,不要错过

大家好&#xff0c;我是知微&#xff01; 先来聊聊什么是GUI。图形用户界面&#xff08;Graphical User Interface&#xff0c;简称 GUI&#xff09;采用直观的图形方式展示&#xff0c;让用户与计算机或设备交流变得简单直观。不仅工作效率得到极大提升&#xff0c;用户体验也…

普通人也可以在抖音上开店卖货了,还有多少人不知道!

大家好&#xff0c;我是电商糖果 在抖音上开网店卖货最近几年特别火&#xff0c;我想只要是稍微了解电商创业的朋友都知道。 就当你没有创业做电商的想法&#xff0c;你只要有网购的习惯&#xff0c;就会发现抖音上购买商品非常的方便。 而且身边的同事&#xff0c;朋友也都…

全新G级越野车家族领衔 梅赛德斯-奔驰携强劲实力阵容和前瞻数字科技亮相2024北京车展

全新纯电G级越野车、G 500和AMG G 63亮相&#xff0c;油电双雄带来G级越野车的多元选择CLA级概念车携MMA平台及MB.OS构建奔驰电动化、数字化的未来&#xff0c;定义新生代电动风潮全新AMG GT 63 S E PERFORMANCE车展亮相&#xff0c;以F1技术打造“史上最快AMG量产车”“迈巴赫…

Vue2 —— 学习(十)

目录 一、vue-resource 库 二、插槽 &#xff08;一&#xff09;默认插槽 &#xff08;二&#xff09;具名插槽 &#xff08;三&#xff09;作用域插槽 三、vuex &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;多组件共享数据 1.通过全局事件总线实现 2…

【virtuoso】 PDK

什么是PDK&#xff1f; PDK( Process Design Kit )&#xff0c;工程设计数据包&#xff0c;是芯片厂家foundary提供给IC设计公司的有关制造工艺的模型和EDA工具支持。是连接IC制造公司&#xff0c;IC设计公司的桥梁。 PDK包含内容&#xff1a; 器件模型 SPICE模型模型 与 测量误…