【问题标题】:Modify existing build system in sublime text 3在 sublime text 3 中修改现有的构建系统
【发布时间】:2019-02-11 20:17:54
【问题描述】:

我目前在 ST3 中使用以下构建系统来编译 .cpp 代码

{
    "cmd": ["mingw32-g++.exe", "-c", "$file", "-o", "${file_path}/${file_base_name}.o", "&&",
"mingw32-g++.exe", "-o", "${file_path}/${file_base_name}.exe", "${file_path}/${file_base_name}.o", "&&",
"start","${file_path}/${file_base_name}.exe"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c++,source.cpp",
    "shell": true
}

我面临的问题是,我需要将输入一一输入到cmd中,这很耗时。

是否有可能以某种方式调整上述构建系统以执行下面给出的类似操作?

在 cmd 上。

${file_base_name}.exe < TestCases.txt > TestAnswers.txt

【问题讨论】:

  • 您是否尝试在现有命令中包含重定向以查看发生了什么?
  • 不行,你能帮帮我吗?
  • 我只想将它们作为单独的参数包含在内,就像您为其他所有内容所做的那样。
  • 我试过做同样的事情,现在它只是打开一个空白的 cmd 屏幕。我检查了 TestAnswers.txt 的内容,它仍然是空的
  • 如果您不打算与它进行交互,它在一个单独的窗口中开始对您来说很重要吗?

标签: sublimetext3 build-system sublime-build


【解决方案1】:

这可以通过标准方式实现,即在命令行上使用输入和输出重定向,如您的问题本身所述。但是,为了使其发挥作用,您需要更改定义构建的方式。

同时使用cmdshell(就像您当前所做的那样),您将命令行指定为要运行的程序以及它应该获取的参数(这就是您现在正在做的事情)。

您要在此处使用shell_cmd,在这种情况下,您提供一个代表完整命令行的字符串,就像您在命令提示符中输入它一样,总体上更容易。

在不深入了解所涉及的底层机制的具体细节的情况下,Python 运行时对两者的处理和执行方式不同,但使用 shell_cmd 会将您的命令行直接交给命令处理器来处理。

修改后的构建示例如下:

{
    "shell_cmd": "mingw32-g++.exe \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\" < Input.txt > Answers.txt",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",
}

这里首先要注意的是,因为shell_cmd 是单个字符串,所以所有文件名都需要包裹在"quotes" 中,以防止文件名包含空格,这不是你必须做的事情使用cmd,因为在这种情况下,每个参数都是一个单独的字符串。

此外,这里的命令行已经被清理了一点,因为如果您使用 gcc/mingw,您应该能够直接将文件编译为可执行文件,而无需执行单独的链接步骤(如果您愿意,那步骤很容易添加回来)。

正如这里所定义的,工作目录设置为存储正在编译的文件的路径,这意味着命令要查找的输入文件需要在该文件夹中,并且将在该文件夹中创建输出文件.

如果您打开输出文件,Sublime 会在您每次运行构建时重新加载它(可能会或可能不会提示,具体取决于您的偏好)。

【讨论】:

    【解决方案2】:

    经过大量的尝试和尝试,我想出了以下解决此问题的方法。

    更新的构建系统

    {
        "cmd": ["C++_compile_Sublime.bat", "$file"],
        "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
        "working_dir": "${file_path}",
        "selector": "source.c, source.c++,source.cpp,source.cc",
        "shell": true
    }
    

    和C++_compile_Sublime.bat如下

    mingw32-g++.exe -c %~n1.c -o %~n1.o
    mingw32-g++.exe -o %~n1.exe %~n1.o
    cls
    %~n1.exe < Input.txt > Output.txt
    

    正如@OdatNurd 所指出的,“shell_cmd”工作得非常完美

    注意: C++_compile_Sublime.bat 必须在环境变量中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 2015-03-01
      • 2013-10-14
      • 1970-01-01
      • 2014-10-30
      • 2018-04-27
      • 2015-02-04
      相关资源
      最近更新 更多