ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

ComplexBuild

作者: lucteo 所有

Sublime Text插件,允许多用户创建更复杂的构建环境,包含多个命令和变量

详细信息

  • 1.1.1
  • github.​com
  • github.​com
  • 5年前
  • 1小时前
  • 7年前

安装次数

  • 总数 339
  • Win 227
  • Mac 57
  • Linux 55
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

README

源代码
raw.​githubusercontent.​com

Sublime Text Complex Build插件

Sublime Text插件,允许多用户创建更复杂的构建环境,包含多个命令和变量。

此插件对于以下场景很有帮助:* 拥有多条您频繁调用的构建命令,如构建、清理、配置、运行* 拥有需要经常更改的不同参数的构建命令* 对构建系统的配置进行自定义,以满足您的需求

安装

使用包控制进行安装

  • 打开Sublime Text的命令面板
  • 选择包控制:安装包
  • 选择ComplexBuild

示例使用

用户视角

假设我们有一个CMake项目。因此,以下操作将经常执行:* 配置构建系统* 构建所有* 清理* 运行构建的可执行文件

对于此项目,我们经常修改以下参数:* 模式(调试/发布/reldev)* 要构建的目标* 预传给CMake的附加配置参数* 构建时传递的附加参数* 执行时传递的运行参数

在这个练习结束时,我们期望构建菜单(Cmd+Shift+B或Ctrl+Shift+B)显示以下内容

选择“更改选项”应显示以下内容

用户可以更改这些选项;对于其中一些(例如模式、目标),用户需要从一组固定值中选择,而对于其他一些,用户可以输入相应的文本值。

设置正确参数后,用户可以 配置 项目,对选定的目标进行 构建清理,或运行通过构建解决方案所生成的可执行程序。如果用户在构建命令遇到问题,总可以使用 打印构建变量 命令来打印所有定义的变量及其值。

实现上述方案

为了本例的目的,我们将使用每个项目的构建方案;同样的结果可以使用独立的 Sublime Text 构建方案 (.sublime-build 文件) 实现。

需要配置一些事情,每一条都在其所属的部分:* 包含构建菜单中条目的 build_systems 部分 * 描述构建选项的 ComplexBuild_options 部分 * 描述我们将用于构建的预定义值 ComplexBuild_values * 作为项目设置的一部分的 ComplexBuild,其中将存储用户选择的值

前三个部分可以放置在专门的 Sublime Text 构建方案中,但最后一个始终将存储在项目设置中。

build_system 部分

在我们的例子中,build_systems 部分应该配置如下

"build_systems":
[
    {
        "name": "Testability build",
        "target": "complex_build_exec",
        "target_cmd": "${cmdbuild}",
        "target_dir": "${builddir}",
        "variants":
        [
            {
                "name": "Change Options",
                "target": "complex_build_options"
            },
            {
                "name": "Configure",
                "target": "complex_build_exec",
                "target_cmd": "${cmdconfigure}"
            },
            {
                "name": "Clean",
                "target": "complex_build_exec",
                "target_cmd": "${cmdclean}"
            },
            {
                "name": "Run",
                "target": "complex_build_exec",
                "target_cmd": "${cmdrun}",
                "target_dir": "${rundir}"
            },
            {
                "name": "Print build variables",
                "target": "complex_build_print_vars"
            }
        ]
    }
],

ComplexBuild 定义了 3 个可以在构建系统中使用的命令:* complex_build_exec – 在 target_dir 目录中执行给定的 target_cmd 命令 * complex_build_options – 显示用户要配置的选项菜单 * complex_build_print_vars – 打印当前可用的变量

我们注意到 complex_build_exec 的实际参数形式为 ${var_name}。ComplexBuild 将这些替换为这些变量的配置值。这些变量的值可以在两个地方定义:作为构建值或用户指定的值

ComplexBuild_values 部分

在这里,用户定义了直接由构建系统使用且通常用户无法指定的变量/值。对于我们这个例子,我们有

"ComplexBuild_values":
{
    "builddir": "${project_path}",
    "rundir": "${project_path}",
    "cmdconfigure": "/usr/local/bin/cmake ${configure_args} -DCMAKE_BUILD_TYPE=${mode}",
    "cmdbuild": "make ${build_args} ${target}",
    "cmdclean": "make clean",
    "cmdrun": "${executable} ${run_args}"
},

我们定义了执行每个构建操作时实际要执行的命令,以及用于构建和运行应用程序的目录(在我们的例子中是项目路径)

ComplexBuild_options 部分

在本节中,我们定义了用户之间切换不同构建配置所展示的菜单。对于我们这个例子,我们可以有

"ComplexBuild_options":
[
    {
        "name": "Set mode",
        "show": "${mode}",
        "choices":
        [
            {
                "name": "Debug",
                "set":
                {
                    "mode": "Debug"
                }
            },
            {
                "name": "RelDev",
                "set":
                {
                    "mode": "RelDev"
                }
            },
            {
                "name": "Release",
                "set":
                {
                    "mode": "Release"
                }
            }
        ]
    },
    {
        "name": "Set target",
        "show": "${executable}",
        "choices":
        [
            {
                "name": "testability",
                "set":
                {
                    "target": "mytest",
                    "executable": "./mytest"
                }
            },
            {
                "name": "perf_test",
                "set":
                {
                    "target": "perfTest",
                    "executable": "./perfTest"
                }
            }
        ]
    },
    {
        "name": "Set configure args",
        "show": "${configure_args}",
        "edit_value": "configure_args"
    },
    {
        "name": "Set build args",
        "show": "${build_args}",
        "edit_value": "build_args"
    },
    {
        "name": "Set run args",
        "show": "${run_args}",
        "edit_value": "run_args"
    }
],

我们可以配置两种类型的选项:选择,用户将看到下拉列表,或编辑值,用户将看到一个编辑字段,用户可以在其中输入选项。所有这些选项都有一个名称,并且在显示选项时可选地显示文本;此文本通常是可以更改的变量的值。

对于 edit_value 类型的选项,我们需要提供一个变量名称,用户输入的文本将被放入其中。选择可以允许更先进的值更改;对于用户可以有的每个选项,我们可以在一个 set 列表中设置一个或多个变量。例如,当我们在调试和发布构建之间切换时,我们可以启用/禁用不同的构建选项,这些选项存储在不同的变量中。

保存的选项

用户将通过 更改选项 菜单设置的值将作为项目设置(.sublime-project 文件的一部分)存储。对于我们的项目,一个可能的配置是

"settings":
{
    "ComplexBuild":
    {
        "build_args": "-j4",
        "configure_args": "-G \"Unix Makefiles\"",
        "target": "mytest",
        "executable": "./mytest",
        "mode": "Release",
        "run_args": ""
    }
}

这将在用户通过 更改选项 菜单更改设置时被覆盖。这里显示的值将覆盖在 ComplexBuild_values 部分中设置的任何值。


通过这些简单的配置,人们可以构建越来越复杂的构建系统。我们可以有很多变量,可以从选项菜单中轻松配置,并将其作为实际构建命令的参数应用。

完整的 .sublime-project 文件(点击展开)

{
    "ComplexBuild_options":
    [
        {
            "name": "Set mode",
            "show": "${mode}",
            "choices":
            [
                {
                    "name": "Debug",
                    "set":
                    {
                        "mode": "Debug"
                    }
                },
                {
                    "name": "RelDev",
                    "set":
                    {
                        "mode": "RelDev"
                    }
                },
                {
                    "name": "Release",
                    "set":
                    {
                        "mode": "Release"
                    }
                }
            ]
        },
        {
            "name": "Set target",
            "show": "${executable}",
            "choices":
            [
                {
                    "name": "testability",
                    "set":
                    {
                        "target": "mytest",
                        "executable": "./mytest"
                    }
                },
                {
                    "name": "perf_test",
                    "set":
                    {
                        "target": "perfTest",
                        "executable": "./perfTest"
                    }
                }
            ]
        },
        {
            "name": "Set configure args",
            "show": "${configure_args}",
            "edit_value": "configure_args"
        },
        {
            "name": "Set build args",
            "show": "${build_args}",
            "edit_value": "build_args"
        },
        {
            "name": "Set run args",
            "show": "${run_args}",
            "edit_value": "run_args"
        }
    ],
    "ComplexBuild_values":
    {
        "builddir": "${project_path}",
        "rundir": "${project_path}",
        "cmdconfigure": "/usr/local/bin/cmake ${configure_args} -DCMAKE_BUILD_TYPE=${mode}",
        "cmdbuild": "make ${build_args} ${target}",
        "cmdclean": "make clean",
        "cmdrun": "${executable} ${run_args}"
    },
    "build_systems":
    [
        {
            "name": "Testability build",
            "target": "complex_build_exec",
            "target_cmd": "${cmdbuild}",
            "target_dir": "${builddir}",
            "variants":
            [
                {
                    "name": "Change Options",
                    "target": "complex_build_options"
                },
                {
                    "name": "Configure",
                    "target": "complex_build_exec",
                    "target_cmd": "${cmdconfigure}"
                },
                {
                    "name": "Clean",
                    "target": "complex_build_exec",
                    "target_cmd": "${cmdclean}"
                },
                {
                    "name": "Run",
                    "target": "complex_build_exec",
                    "target_cmd": "${cmdrun}",
                    "target_dir": "${rundir}"
                },
                {
                    "name": "Print build variables",
                    "target": "complex_build_print_vars"
                }
            ]
        }
    ],
    "folders":
    [
        {
            "path": "."
        },
    ],
    "settings":
    {
        "ComplexBuild":
        {
            "build_args": "-j4",
            "configure_args": "-G \"Unix Makefiles\"",
            "target": "mytest",
            "executable": "./mytest",
            "mode": "Release",
            "run_args": ""
        }
    }
}

有用的快捷键

有了正确的键盘快捷键,这些构建自定义功能将更加有用,以简化对构建功能的访问。

我们建议将以下额外的键配置添加到键绑定中

{ "keys": ["f5"], "command": "build", "args": { "variant": "Run"} },
{ "keys": ["alt+f7"], "command": "complex_build_options"},
{ "keys": ["alt+b"], "command": "show_panel" , "args" : {"panel": "output.exec"} },

有了这些添加,以下快捷键可以用来与构建系统交互

键盘快捷键 含义
Cmd+Shift+B(或Ctrl+Shift+B) 显示构建菜单;通常用于选择 配置清理 或主构建命令
F7 或 Cmd+B(或Ctrl+B) 运行最后选择的构建命令
Alt+F7 允许轻松更改构建选项
F5 运行所选程序
Alt+B 显示最后控制台输出