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的安装位置 在下面的…

Java基础:设计模式之原型模式

原型模式是一种创建型设计模式,它允许我们通过复制现有的对象来创建新的对象,而不是每次都通过构造函数新建。这种模式适用于那些创建新对象成本较高或者构造过程复杂的情况。在原型模式中,一个对象通过实现Cloneable接口并重写其clone()方法…

WPF —— MVVM架构

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

什么是RabbitMQ,RabbitMQ基本概念,RabbitMQ的使用场景

目录 面试官:什么是RabbitMQ,RabbitMQ的使用场景什么是RabbitMQ?RabbitMQ基本概念RabbitMQ的使用场景举例该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是RabbitMQ,RabbitMQ的使用场景 …

SpringCloud之Feign集成Ribbon

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

jmeter固定定时器,生效是在请求发送前还是发送后

一、结论 先说结果,是生效在请求发送前 二、背景 在压测流程的时候,生成订单后紧接着调订单查询接口,查询不到,报错率还挺高的,原因肯定是主从延迟,但是DBA非说延时1s内是正常的,在CPU耗用在40%以内的情…

IDM下载器_Internet Download Manager 6.42.7

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

【打工日常】云原生之部署私有化个人工作云盘

一、FileGator介绍1.FileGator简介FileGator是一个免费开源自托管的Web应用程序,用于管理文件和文件夹,部署在自己的服务器上,解放笔记本的压力,随时随地的能看到自己的文件,并且可以共享,方便团队的协作,更有利于个人工作的开展。2.FileGator功能管理本地存储库文件夹中…

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

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

RealSenseSR300工程环境配置说明

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

开发Chrome插件入门

开发Chrome插件(也称为Chrome扩展)是一个相对直接的过程,尤其对于已经熟悉HTML、CSS、JavaScript的前端开发者而言。以下是开发Chrome插件的基本步骤和示例: 1. 准备工作 首先,确保你有一个适合开发的环境。通常这意…

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&…

java语言基础面试题(一)

面试题1&#xff1a;简述Java的主要特性。 回答&#xff1a;Java的主要特性包括面向对象、跨平台性&#xff08;通过JVM实现&#xff09;、自动内存管理&#xff08;垃圾回收机制&#xff09;、丰富的API和安全性高。 面试题2&#xff1a;解释Java中的多态性。 回答&#xf…

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设置光标…

C语言案例——输出 Fibonacci 数列(斐波那契数列)的前 40 项

目录 斐波那契数列待续、更新中 斐波那契数列 输出 Fibonacci 数列&#xff08;斐波那契数列&#xff09;的前 40 项 #include <stdio.h> void main() {int a[40] {1,1};int i;printf( "%12d%12d",a[0],a[1]);for(i2; i<40; i){a[i]a[i-1]a[i-2];printf( &q…

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

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

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

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

[svelte]组件怎么进行状态共享

前面提到的svelte stores是一种用于管理应用程序状态的机制&#xff0c;它可以在不同组件之间共享状态&#xff0c;但就可能会有这样子的疑问&#xff0c;难道一定要通过stores来传递属性的状态吗 Props&#xff08;属性&#xff09; 最简单的方法是通过将状态作为属性传递给子…

OceanBase 分布式数据库【信创/国产化】- OceanBase 概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 概述前言OceanBase 数据更新架构高可用高兼容水平扩展低成本实时 HTAP安全可靠OceanBase 分布式数据库【信创/国产化】- OceanBase 概述 编辑 | 简简单单 Online zuozuo 地址 | https://blog.…