python 自动编译VS项目

news2024/11/17 16:40:29

目录

一、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 = False
    for path in paths:
        if re.match(r'.*Visual Studio.*', path):
            hasVisualStudio = True
            print('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 True
        return False
    return 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=' + QTDIR
    cmd += ' -DDepsPath:PATH=' + DepsPath
    cmd += ' -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 re
    json = {'raw':line}
    if isinstance(rules, dict):
        rules = [rules]
    for idx, r in enumerate(rules):
        match = re.match(r['r'],line)
        if not match:
            continue
        l = match.groups()
        for i, f in enumerate(r['v']):
            if i >= len(l):
                break
            json[f] = l[i]
        return idx, json
    return -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:
                break
            cb_output(line.strip())

def build(solution, project='', target='Release|x64', logfile='', clean=True):
    if clean:
        print('clean %s ...' % solution)
        cmd = 'devenv %s /Clean' % solution
        if target:
            cmd += ' "%s"' % target
        print(cmd)
        os.system(cmd)

    print('build %s ...' % solution)
    cmd = 'devenv %s /Build' % solution
    if target:
        cmd += ' "%s"' % target
    if project:
        cmd += ' /project %s' % project
    #os.system(cmd)
    #return
    print(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 = 0
    data.failed = 0
    data.projects = {}
    data.fd = open(logfile, 'w') if logfile else None
    def cb(line):
        idx, matched = match_rules(rules, line)
        if idx == 0:
            project = matched['project']
            data.projects[project] = data.idx
            data.idx += 1
            print('[%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.coloradmin.cn/o/592608.html

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

相关文章

04 布隆过滤器BloomFilter

是什么 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制数组一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中。通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景&a…

C++ 和机器学习:使用 C++ 执行 ML 任务的简介

C 和机器学习:使用 C 执行 ML 任务的简介 介绍 C 是一种高性能编程语言,非常适合机器学习( ML ) 任务。尽管它在 ML 中可能不像 Python 或 R 那样流行,但它在速度和内存效率方面具有优势。 在本文中,我们将概述使用 C 执行 ML 任务…

“双碳同行者大会”成功举办,绿色家居企业参与其中

2023年5月27日 ,由万科集团创始人、深石集团创始人王石先生创立的碳中和社区品牌“生物圈三号”在深圳大梅沙成功举办了“回归未来双碳同行——生物圈三号双碳同行者大会暨全球运河穿越新书发布会”。 生物圈三号作为社区碳中和综合解决方案平台,为建筑、…

Word控件Spire.Doc 【其他】教程(5):在 Word 中嵌入媒体文件

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

Axios请求失败重刷接口

需求背景 页面接口请求时偶尔会出现 Network Error 异常报错,重新请求就会请求成功 接口没办法捕获异常原因,前端来做一次重刷解决问题 net::ERR_SSL_PROTOCOL_ERRORnet::ERR_CONNECTION_REFUSED 解决思路 记录请求map(以url为唯一标识&…

Live800:智能客服机器人有哪些核心功能?

随着互联网的普及和用户服务要求的不断升级,许多企业已经开始关注在线客服系统以及智能客服机器人的应用。 那么,智能客服机器人在解决企业痛点的过程中,充分使用了哪些核心功能呢? 一、自然语言处理 客户提问的方式千奇百怪&am…

Hindawi官宣上线8本新刊!这6本被踢SCI期刊,EI正常在检

Hindawi官宣:8本新刊上线 2023年5月23日,Hindawi官宣与IET的8本合作期刊在完全开放获取模式下全面上线,所有期刊名称仍然保留IET抬头,但将由Hindawi全面负责出版、主持和运营等相关事宜。 No.1 IET BioMetrics 该期刊关注生物识…

linux shell编程规范和变量

一、shell简述 概念:shell解释器,翻译官功能,与内核进行沟通的应用程序。 把代码翻译为二进制,让内核处理,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核…

功能上新| GPU篇:SoC GPU信息、GPU Counter性能指标

在玩家要求游戏更流畅、画质更精美的今天,优化GPU过度使用导致的性能问题成了大多数游戏开发团队关注的核心。当项目的GPU压力达到一定阈值时,卡顿、掉帧、发热、降频等问题便随之而来,严重影响用户体验。 为了解决项目的GPU压力问题&#x…

Kafka的常用命令

提前说明:下述所有命令都是需要进入到Kafka服务的的bin目录下执行,即下图所示目录。 1.查看主题列表 kafka-topics.sh --list --bootstrap-server ip:端口 2.创建主题 如下为创建一个单分区单副本的主题的命令示例: kafka-topics.sh --c…

Hack The Box - sequel关卡

TASK 1 任务 1 During our scan, which port do we find serving MySQL? 在扫描过程中,我们发现哪个端口为 MySQL 提供服务? 3306TASK 2 任务 2 What community-developed MySQL version is the target running? 目标运行的是哪个社区开发的MySQL版…

基于nodejs+Vue的少儿编程课程网上报名系统express+vscode

近年来,随着网络技术的不断发展,越来越多人在网站查询各种信息,少儿编程网上报名系统对用户和管理员都有很大帮助,少儿编程网上报名系统通过和数据库管理系软件协作来实现用户与管理员之间的一个很好的操作平台,基于这…

【大数据学习篇11】广告点击流实时统计

学习目标/Target 掌握广告点击流实时统计实现思路 掌握利用Kafka生产用户广告点击流数据 了解数据库设计 掌握如何创建Spark Streaming连接 掌握利用Spark Streaming读取业务数据 掌握利用Spark读取黑名单用户 掌握利用Spark Streaming过滤黑名单用户 掌握利用Spark St…

bug:使用useClipboard不生效问题

背景 使用vueuse/core的useClipboard来实现复制功能,没有生效。 原因 useClipboard 的底层是是使用navigator.clipboard实现的。但是在 http协议 中,navigator.clipboard打印undefined(如下图),导致在http协议中使用…

旅行商问题TSP

目录 蚁群算法 Hopfield网络 遗传算法 免疫算法 蚁群算法 求解思路 Hopfield网络 Hopfield网络适合求结果的次优解,可以保证解向能量函数最小值方向收敛,但不能确保达到全局最小点。 实现能量函数 网格能量的最小值对应于最佳或者次最佳的路径距离。…

MySQL部署PXC集群-全网最详细

MySQL部署PXC集群 一,PXC了解 1.PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案 Galera Cluster是Codership公司开发的一套免费开源的高可用方案 PXC集群主要由两部分组成:Percona Server …

计算机网络开荒1-概述

文章目录 一、网络基本概述1.2 InternetInternet组成Internet服务角度 1.3 网络协议 二、计算机网络结构2.1 计算机网络结构2.1.1 网络边缘2.1.2 接入网络 物理介质2.1.2.1 DSL2.1.2.2 电缆网络2.1.2.3 家庭网络接入2.1.2.4 企业网络接入2.1.2.5 无线网络接入 2.1.3 网络核心 三…

肉豆蔻酰六肽-4 /myristoyl hexapeptide-4, sympeptide230

简介----肉豆蔻酰六肽-4 肉豆蔻酰六肽-4为胜肽系列应用最早和最广泛的多胜肽,国内外知名品牌普遍采用作为抗皱配方重要成分,在很多抗皱护肤产品中经常出现它的身影。它可以穿透真皮增加胶原蛋白,通过从内至外的重建来逆转皮肤老化的过程&…

感应雷电浪涌的防线,SPD浪涌保护器

SPD - Surge Protective Device SPD 是防止雷击导致故障的避雷器,代表浪涌保护设备。一般指浪涌保护器,浪涌保护器,也叫防雷器,是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置。 IEC/ EN61643-11 &#xff08…

Vulkan Tutorial 8 深度缓冲

目录 26 三维几何图形 深度图像和视图 27 显式转换深度图像 渲染通道 帧缓冲区 清除值 深度和模版状态 处理窗口调整大小 26 三维几何图形 到目前为止,我们所处理的几何体是投射到三维的,但它仍然是完全平面的。在这一章中,我们要给位…