我目前正在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
答案 0 :(得分:1)
这是可能的,以标准方式进行,即使用问题本身概述的命令行上的输入和输出重定向。但是,为了使它起作用,您需要更改定义构建的方式。
同时使用cmd
和shell
(如您目前正在做的那样),您可以将命令行指定为要运行的程序以及应获取的参数(这就是您正在做的事情)现在)。
这里要使用的是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会在每次运行构建时重新加载它(根据您的喜好,系统可能会提示或不提示您)。
答案 1 :(得分: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必须在环境变量中