0

我目前在 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中,这很耗时。

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

在命令上。

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

2 回答 2

1

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

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

您要在此处使用的是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 将在您每次运行构建时重新加载它(您可能会收到提示,也可能不会收到提示,具体取决于您的偏好)。

于 2019-02-11T21:47:12.090 回答
0

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

更新的构建系统

{
    "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 必须在环境变量中

于 2019-02-11T22:00:37.283 回答