[英]How to Automatically Run C++11 on Sublime Text 3 on macOS?
我想使用 Sublime Text 3 构建系统自动运行 C++:
当我手动设置构建系统时它起作用:
> Tools > Build System > C++11
我应该改变什么才能设置,
> Tools > Build System > Automatic
并运行 C++11?
{
"cmd": ["g++", "-std=c++11", "-o", "${file_path}/${file_base_name}", "${file}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",
"quiet": true,
"variants":
[
{
"name": "Run",
"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
},
{
"name": "Build without C++11",
"cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
}
]
}
#include <stdio.h>
int main()
{
printf("Hello World!\n");
}
Hello World!
[Finished in 0.1s]
我的猜测是它可能会使用,
> Tools > Build System > C++ Single File
// {
// "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\"",
// "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
// "working_dir": "${file_path}",
// "selector": "source.c++",
// "variants":
// [
// {
// "name": "Run",
// "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
// }
// ]
// }
{
"cmd": ["g++", "-std=c++11", "-o", "${file_path}/${file_base_name}", "${file}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",
"variants":
[
{
"name": "Run",
"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
},
{
"name": "Run with C++11",
"cmd": ["bash", "-c", "g++ '${file}' -std=c++11 -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
},
{
"name": "Build without C++11",
"cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
}
]
}
Sublime 根据使用的语法为Automatic
选择构建系统,它与构建系统中的selector
相关联。 对于 C,这是source.c
,对于 C++ 是source.c++
,依此类推。
当您选择Tools > Build
,Sublime 将当前文件的语法与它当前知道的所有构建系统进行匹配,并基于此进行选择。 这里可能会发生一些不同的事情:
没有构建系统与文件的范围相关联; 执行构建时,未选择No Build System
并且状态栏中显示No Build System
。 在这种情况下,什么也不会发生。
恰好有一个与范围相关联的构建; 该构建被选择并直接执行。
有多个构建与范围相关联。 第一次发生这种情况时,Sublime 会通过一个快速面板提示您,询问您要执行的构建,然后执行该构建。 只要您将构建系统设置为相同,未来的构建将继续自动选择和使用该构建。
请务必注意,当您在构建系统中使用variant
时,尽管只有一个sublime-build
文件,但该文件定义了多个构建,因此在这种情况下,上面的 #3 自动适用。
从上面查看您的构建系统来看,它似乎应该可以正常工作,特别是如果在“ Tools > Build System
菜单中手动选择构建系统符合您的预期。
您的自定义构建系统启用了quiet: true
,这会阻止 Sublime 显示执行时间(以及构建失败的错误信息),但在自动构建的情况下,您上面的输出看起来像是在打印[Finished]
。
从这一点我同意,在这种情况下,Sublime 选择了一个与您预期不同的构建系统,这可能确实是内部构建(尽管根据您上面的输出,您可能已经修改了它)。
由于您提供的构建在您手动执行时有效,我最好的猜测是您已经遇到了上面的情况 3; 有多个构建与文件的范围相匹配。
在这种情况下,使用Tools > Build With...
将使 Sublime 再次提示您选择所需的构建。 这样做并确保选择所需的构建可能会为您解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.