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(cmakeTest
        MANUAL_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 TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS cmakeTest
    BUNDLE 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 _DEL


if 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

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

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

相关文章

PE文件(三)节表作业

本次作业以notepad进行演示,如下是其在硬盘上的内存 1.手动解析节表 由标准pe头可知,一共由7个节也就是7个节表,可选pe头的大小是0X00F0,即240字节大小 根据上述我们所获取的信息,找到节表的首地址为0x01F8 .text …

微服务:Nacos注册中心

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Nacos注册中心 一、服务注册与发现1.启动Nacos…

Vite proxy-rewrite 属性详解

在前端开发中,为了避免跨域问题,我们会在vite.config.ts 中配置如下问题 rewrite: 由于不了解Nginx的知识,这个属性一直困扰着我,这个重写有啥用,加和不加有啥影响 server: {host: 0.0.0.0,proxy: {/api: {target: ht…

手机通讯录删除了怎么恢复?这里几个方法超快找回!

当我们不小心删除了手机通讯录中的联系人,或者手机丢失导致通讯录信息丢失,恢复通讯录就变得非常重要了。手机通讯录删除了怎么恢复?我们该如何快速找回这些重要的联系人信息呢?下面我们将介绍2种简单易行的方法,帮助您…

Spark核心名词解释与编程

Spark核心概念 名词解释 1)ClusterManager:在Standalone(上述安装的模式,也就是依托于spark集群本身)模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器ResourceManager(国内…

树莓集团整合行业资源 优化数字产业生态圈

树莓集团,作为国际数字影像产业园的运营方以及链主企业,自创立以来,一直致力于整合行业优质资源,为数字科技领域的优秀企业提供一片肥沃的创新土壤。随着信息技术的迅猛发展和数字经济的深入推进,树莓集团深知自身的责…

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统,恢复出厂开箱状态一模一样 适用型号:隐星P16 23 链接:https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码:ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

机器学习在医疗行业的应用:颠覆传统诊疗模式,开启智慧医疗新时代

文章目录 一、精准诊断的突破二、药物研发的革新三、患者管理的智能化四、智能辅助决策系统五、机器学习在医疗行业的前景 随着科技的飞速发展,机器学习作为人工智能的核心技术,正逐渐渗透到各个行业中,其中在医疗行业的应用尤为引人瞩目。机…

Strassen矩阵乘法——C++

【题目描述】 根据课本“Strassen矩阵乘法”的基本原理,设计并实现一个矩阵快速乘法的工具。并演示至少10000维的矩阵快速乘法对比样例。 【功能要求】 实现普通矩阵乘法算法和“Strassen矩阵乘法”算法对相同的矩阵,分别用普通矩阵乘法算法&#xff…

电机控制系列模块解析(11)—— 电流采样

一、电流采样分类 由下图可知,采样电阻的位置不同,电流采样分为输出电流采样、下桥电流采样、母线电流采样。 输出电流采样 定义:输出电流采样是指对电机定子绕组或转子绕组(对于内转子永磁同步电机)输出的电流进行测…

什么是区块链?智能合约有什么用?

一、什么是区块链? 区块链是一种去中心化的分布式账本技术,通过加密和共识机制确保数据的安全和透明。它将交易数据按照时间顺序记录在区块中,并通过链式链接保证了数据的不可篡改性。 二、什么是智能合约? 智能合约是运行在区…

如何修改php版本

我使用的Hostease的Windows虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机,但是没有找到切换PHP以及查看PHP有哪些版本的位置,因此咨询了Hostease的技术支持,寻求帮助了解到可以实现在Plesk面板上找到此切换PHP版本的按钮…

linux tcpdump的交叉编译以及使用

一、源码下载 官网:点击跳转 二、编译 1、解压 tar -xf libpcap-1.10.4.tar.xz tar -xf tcpdump-4.99.4.tar.xz 2、配置及编译 //libpcap: ./configure --hostarm-linux --targetarm-linux CCarm-linux-gcc --with-pcaplinux --prefix$PWD/build//t…

37 线程控制

内核中没有明确的线程的概念,线程作为轻量级进程。所以不会提供线程的系统调用,只提供了轻量级进程的系统调用,但这个接口比较复杂,使用很不方便,我们用户,需要一个线程的接口。应用层对轻量级进程的接口进…

企业如何保证内部传输文件使用的工具是安全的?

企业内部文件的频繁交换成为了日常运营不可或缺的一环。然而,随着数据量的爆炸式增长和网络攻击手段的日益复杂,内网文件传输的安全隐患也日益凸显,成为企业信息安全的薄弱环节。本文将探讨内网文件传输的安全风险、企业常用的防护措施。 内网…

Python轻量级Web框架Flask(12)—— Flask类视图实现前后端分离

0、前言: 在学习类视图之前要了解前后端分离的概念,相对于之前的模板,前后端分离的模板会去除views文件,添加两个新python文件apis和urls,其中apis是用于传输数据和解析数据 的,urls是用于写模板路径的。 …

终于有人把无人机5G通信原理讲清楚了

在现代科技快速发展的背景下,无人机技术在各个领域都有了广泛应用,从送外卖到农业监控,无人机正变得越来越普遍。然而,无人机的效能很大程度上受到其通信系统的限制,尤其是在城市这种高楼林立、障碍物众多的环境中。为…

五一旅游必备物品清单 建议把这份清单记在备忘录

五一小长假就要来临,相信很多人已经跃跃欲试,准备带着家人或朋友外出旅游,享受这难得的休闲时光。出游总是让人兴奋不已,但带小孩出游,行李准备可是一项大工程。为了让旅程更加顺利,提前列一份必备物品清单…

Python绘制3D曲面图

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Python中绘制3D曲面图的艺术 在数据可视化的世界中,3D曲面图是一种强大的工…