python 自动编译VS项目

news/2024/5/9 10:51:26/文章来源:https://blog.csdn.net/shuilan0066/article/details/130954511

目录

一、python自动编译项目

1、环境变量

1) CMAKE

2)VS

2、CMAKE 生成VS项目

1)  cmake 命令介绍

2)python 调用cmake 命令

3、devenv编译VS项目

1) devenv介绍

2)devenv命令行开关

3) 自动编译VS项目


一、python自动编译项目

1、环境变量

1) CMAKE

并且把CMake 相关路径添加到环境变量中,

如果只是编译VS项目,不CMAKE的话,可以忽略CMAKE配置

2)VS

 也可以设置环境变量的方法,也可以在python中实现

def check_VS_installed():paths = os.getenv('PATH').split(';')hasVisualStudio = Falsefor path in paths:if re.match(r'.*Visual Studio.*', path):hasVisualStudio = Trueprint('FOUND: %s' % path)if not hasVisualStudio:for path in ('C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE', ):if os.path.isdir(path):paths.append(path)os.environ['PATH'] = ';'.join(paths)return Truereturn Falsereturn True

2、CMAKE 生成VS项目

1)  cmake 命令介绍

CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。

CMake在编译时可以产生标准的makefile文件,然后使用make命令进行编译。

以下是一些常用的CMake命令:

  • cmake -B: 指定构建目录。
  • cmake -S: 指定源代码目录。
  • cmake --build: 构建项目。
  • cmake --install: 安装项目。

  • -D选项可以用来定义变量
cmake -DCMAKE_BUILD_TYPE=Debug
  • -G选项可以用来指定生成器
cmake -G "Visual Studio 16 2019"

  • -A选项可以用来指定平台
cmake -A Win32

根据上述命令,结合自己项目,命令行形式的cmake命令如下:

cmake -B C:\\xnwvideo\\xnwobs\\obs-vs -S C:\\xnwvideo\\xnwobs\\obs-studio -D QTDIR:PATH=C:\\Qt\\6.5.0\\msvc2019_64 -D DepsPath:PATH=C:\\xnwvideo\\windows-deps-2023-04-12-x64 -G  "Visual Studio 17 2022" -A x64

2)python 调用cmake 命令

BuildDir = "C:\\build-video"
CMAKE = "C:\\Program Files\\CMake\\bin\\cmake.exe"
QTDIR = 'C:\\Qt\\6.5.0\\msvc2019_64'
DepsPath = 'D:\\Projects\\windows-deps-2023-04-12-x64'
CWD = os.getcwd()  #当前工作路径
if not os.path.isdir(DepsPath):DepsPath = os.path.join(os.path.split(CWD)[0], 'windows-deps-2023-04-12-x64')def cmake_sln():paths = os.getenv('PATH').split(';')paths.append(os.path.split(CMAKE)[0])os.environ['PATH'] = ';'.join(paths)cmd = 'cmake -B' + os.path.join(CWD, 'obs-vs')cmd += ' -S' + os.path.join(CWD, 'obs-studio')cmd += ' -DQTDIR:PATH=' + QTDIRcmd += ' -DDepsPath:PATH=' + DepsPathcmd += ' -G "Visual Studio 17 2022" -A x64'print(cmd)os.system(cmd)

3、devenv编译VS项目

上一步,使用cmake编译成了 sln 项目工程

这一步,使用devenv 自动编译这个项目,生成exe

1) devenv介绍

devenv是Visual Studio的可执行程序,我的安装在“C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE”下。也可能安装在C:\Program Files (x86)下。

执行devenv命令可以启动带界面的VS编译器。

devenv命令行可以使用多种开关来设置集成开发环境(IDE)的各个选项,以及从命令行生成、调试和部署项目。

如可以使用以下命令行来打开一个解决方案并生成它:

devenv /build Debug "C:\Users\username\Documents\Visual Studio 2010\Projects\WindowsApplication1\WindowsApplication1.sln"
 

2)devenv命令行开关

  • /build: 生成指定的解决方案或项目。
  • /clean: 清除指定的解决方案或项目。
  • /debugexe: 在调试器的控制下加载可执行文件。
  • /deploy: 部署指定的解决方案或项目。
  • /out: 指定生成输出文件的目录。
  • /project: 指定要打开的项目文件。
  • /rebuild: 清除并重新生成指定的解决方案或项目。

3) 自动编译VS项目

devenv obs-vs/obs-studio.sln /Build "Release|x64"

python 实现自动编译

def match_rules(rules, line):import rejson = {'raw':line}if isinstance(rules, dict):rules = [rules]for idx, r in enumerate(rules):match = re.match(r['r'],line)if not match:continuel = match.groups()for i, f in enumerate(r['v']):if i >= len(l):breakjson[f] = l[i]return idx, jsonreturn -1, None

class DummyClass:pass

def call_cmdline(cmd, cb_output):with os.popen(cmd, 'r') as fd:while True:line = fd.readline()if not line:breakcb_output(line.strip())

def build(solution, project='', target='Release|x64', logfile='', clean=True):if clean:print('clean %s ...' % solution)cmd = 'devenv %s /Clean' % solutionif target:cmd += ' "%s"' % targetprint(cmd)os.system(cmd)print('build %s ...' % solution)cmd = 'devenv %s /Build' % solutionif target:cmd += ' "%s"' % targetif project:cmd += ' /project %s' % project#os.system(cmd)#returnprint(cmd)rules = [{'r':r'.*Build started:\s+Project:\s+(.*),\s+Configuration:\s+(.*)\s+.*','v':['project', 'config']},{'r':r'.*Build:\s+(\d+)\s+succeeded,\s+(\d+)\sfailed.*','v':['success', 'fail']}]data = DummyClass()data.idx = 0data.failed = 0data.projects = {}data.fd = open(logfile, 'w') if logfile else Nonedef cb(line):idx, matched = match_rules(rules, line)if idx == 0:project = matched['project']data.projects[project] = data.idxdata.idx += 1print('[%d] %s %s ...' % (data.idx, project, matched['config']))elif idx == 1:data.failed = int(matched['fail'])print('Success %s Failed %s' % (matched['success'], data.failed))if data.fd: data.fd.write('%s\n' % line)call_cmdline(cmd, cb)if data.fd: data.fd.close()return data.failed

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

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

相关文章

玩转用户旅程地图

图:史江鸿 从事需求分析和产品设计工作已经有几个年头了,我很享受这个职业。因为在这段职业历程中,我学到了很多有意思的方法和工具,用户旅程地图就是其中一个。 如今在国内外许多IT公司,用户旅程地图已经成为需求分析…

100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 用…

软考高级架构师笔记-5计算机网络

目录 1. 前言 & 考情分析2. 网络功能和分类2.1 通信技术3. OSI七层模型及协议3. 1 局域网和广域网协议3. 2 协议3. 3 交换技术、路由、传输介质4 IP地址5 网络存储技术6 其它考点8. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔…

喜讯!图扑荣获用友年度十佳产业融合生态伙伴称号

2023 年 4 月 20 日,由中华全国工商业联合会联合工业和信息化部、国务院国资委组织开展的 2023 年度“百场万企”大中小企业融通对接活动——智能制造 MES 产业融通对接会暨 2023 用友 BIP 技术大会 MES 生态创新专题论坛在用友产业园顺利召开。 用友年度生态合作伙…

STM32 Linux开发板丨STM32MP157开发板资料手册+实战教程+视频教程

iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持,借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。 开发板既有A7核&#xff…

一般测试用例执行过程的四个步骤

一般测试用例执行过程的四个步骤 测试用例的执行过程是软件测试中非常重要的一环,它可以有效验证软件是否符合预期的功能和性能要求,进而保证软件的质量和稳定性。一般来说,测试用例的执行过程可以分为四个步骤: 第一步&#xff1…

Unity之2D碰撞器

1、什么是碰撞器 碰撞器是用于在物理系统中 表示物体体积的的(形状或范围) 刚体通过得到碰撞器的范围信息进行计算 判断两个物体的范围是否接触 如果接触 刚体就会模拟力的效果产生速度和旋转 2、参数 Edit Collider:编辑碰撞器 Material…

Python十类常见异常类型(附捕获以及异常处理方式)

目录 前言十类异常1.TypeError2.ValueError3.NameError4.IndexError5.KeyError6.ZeroDivisionError7.IOError8.ImportError9.AttributeError10.KeyboardInterrupt 异常捕获以及处理总结 前言 大家好,我是辣条哥!今天给大家讲讲我们刚开始写代码是都会出现…

TYAN 于Computex2023 展示支持第四代英特尔至强可扩展处理器的新款服务器

【台北讯2023年5月30日】隶属神达集团,神雲科技旗下服务器通路领导品牌TYAN(泰安),于2023 台北国际计算机展(Computex 2023)5月30日至6月2日展览期间,在台北世贸南港展览1馆4楼 M0701a摊位展示最…

【C++】struct 和 class 的区别

欢迎来到博主 Apeiron 的博客,祝您旅程愉快。时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 在 C 中,struct 和 class 唯一的区别就在于 默认的访问权限不同。区别如下: …

界面控件DevExpress WinForms全新的UI模板,解决各种业务线需求!

去年秋天DevExpress官方发布了一个新的 WinForms UI模板预览版(第一个EAP只提供给DevExpress宇宙版激活的用户) ,这些精炼的、随时可用的“模板”旨在启动表单设计/开发过程。有了这个模板,用户可以创建/交付现成的UI解决方案&…

MySQL进阶- SQL优化和视图

目录 SQL优化插入数据时的SQL优化(insert优化,和大批量数据插入)主键优化order by优化(排序操作的优化)group by优化(分组优化)limit优化(分页查询优化) SQL优化 插入数…

高压放大器在驱动压电陶瓷进行铝板无损检测中的应用研究

想要达成在不损害或不影响被测对象使用性能及自身性质的前提下,对被测对象内部进行缺陷,结构,失效分析,就得用到无损检测(Non Destructive Testing)技术,最常用的无损检测方法有很多&#xff0c…

软件测试总结

软件生命周期(SDLC)的六个阶段 1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。 2、需求分析 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要…

Web的基本漏洞--CSRF漏洞

目录 一、CSRF漏洞介绍 1.CSRF漏洞原理 2.CSRF漏洞的类型 3.漏洞识别 4.漏洞攻击 5.CSRF漏洞的危害 6.CSRF漏洞防御 7.CSRF和XSS的区别 一、CSRF漏洞介绍 1.CSRF漏洞原理 CSRF(cross site request forgery)是指跨站请求伪造,是指利用受害者尚未…

whistle以及谷歌插件Proxy SwitchyOmega实现代理

whistle提供本地服务器,以及代理 Proxy SwitchyOmega拦截浏览器的网络请求,指向whistle服务 ip 为什么要用它们呢? 其实一开始使用的是mac的charles,但是出现了网页上传文件数据的时候会被篡改,也可能是我配置的原因…

交换机的4种网络结构方式:级联方式、堆叠方式、端口聚合方式、分层方式

交换机是计算机网络中重要的网络设备之一,用于实现局域网(LAN)内部的数据转发和通信。交换机可以采用不同的网络结构方式来满足不同的网络需求和拓扑结构。本文将详细介绍交换机的四种网络结构方式:级联方式、堆叠方式、端口聚合方…

快速实现TF03-CAN与电脑通信操作说明

目录 一、前言二、工具准备三、连接方式3.1 串口通信连接方式3.2 CAN 通信连接方式 四、TF03 与电脑通信操作说明4.1 切换为CAN通信4.2 安装 USB_CAN TOOL 驱动4.3 CAN 通信下修改波特率 五、常见问题反馈5.1 V9.11 USB-CAN tool按照上述方案发送文件指令不成功的解决方案 一、…

国产系统:麒麟之人大金仓数据库部署

一、基本信息和资源 1.1 查看服务器信息 [root7PGxjKPL4 ~]# cat /etc/*release Kylin Linux Advanced Server release V10 (Sword) DISTRIB_IDKylin DISTRIB_RELEASEV10 DISTRIB_CODENAMEjuniper DISTRIB_DESCRIPTION"Kylin V10" DISTRIB_KYLIN_RELEASEV10 DISTRI…

4、USB协议学习:USB的数据包结构

文章目录 数据包结构包(Packet)PID令牌包SETUP&OUT&IN令牌包SOF令牌包 数据包握手包ACK 握手包NAK 握手包 事务(Transaction)Setup事务OUT事务IN事务 传输(Transfer)控制传输中断传输批量传输同步传输/等时传输 端点 数据包结构 USB的通讯数据由多个传输组成&#xff0…