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

阅读 126

2023-05-31

目录

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

0 0 举报