0
点赞
收藏
分享

微信扫一扫

【vue3】需要了解哪些【全】

勇敢乌龟 2023-05-31 阅读 122

目录

一、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

举报

相关推荐

0 条评论