【发布时间】:2014-08-05 04:40:57
【问题描述】:
我想在 ubuntu 14.04 上用 sublime text 3 编译和运行 C 程序。目前正在使用 gcc 编译程序,使用 sublime text 3 执行命令(见下面的代码),但我想知道是否有可能让程序执行输出也出现在 sublime text 控制台上。
这是我目前必须用 sublime text 3 编译 C 程序的内容
c_compile.sublime-build
{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}"],
"selector" : "source.c",
"shell":false,
"working_dir" : "$file_path"
}
我试过像这样添加&& ./${file_base_name}:
{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}","&&","./${file_base_name}"],
"selector" : "source.c",
"shell":false,
"working_dir" : "$file_path"
}
但它给了我这个错误:
gcc: error: &&: No such file or directory
[Finished in 0.0s with exit code 1]
[cmd: ['gcc', 'Ex1-6.c', '-o', 'Ex1-6', '&&', './Ex1-6']]
[dir: /home/admin/Desktop/C/book/chap1]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]
这是我正在使用的简单 C 程序:
Ex1-6.c
#include <stdio.h>
main(){
printf("Hello world");
}
我在网上搜索了一个解决方案,但建议的答案要么只允许编译(这部分已经为我工作),要么不起作用。知道如何修复此代码以便在 sublime text 3 中编译和运行(如果可能的话)。谢谢
按照 user2357112 的建议编辑 #1:
将shell更改为true后:
{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}","&&","./${file_base_name}"],
"selector" : "source.c",
"shell":true,
"working_dir" : "$file_path"
}
这就是我得到的:
gcc: fatal error: no input files
compilation terminated.
[Finished in 0.0s with exit code 4]
[cmd: ['gcc', 'Ex1-6.c', '-o', 'Ex1-6', '&&', './Ex1-6']]
[dir: /home/admin/Desktop/C/book/chap1]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]
按照 Eugene K 的建议编辑 #2:
我尝试更改 cmd 以仅运行程序:
{
"cmd" : ["./${file_base_name}"],
"selector" : "source.c",
"shell":false,
"working_dir" : "$file_path"
}
它运行成功,并在控制台上打印了一些代码:
Hello world
[Finished in 0.0s with exit code 12]
[cmd: ['./Ex1-6']]
[dir: /home/amir/Desktop/C/book/chap1]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]
到目前为止,cmd 可以编译或运行,但不能同时执行这两种操作,希望可以做一些事情以使其通过单个命令编译和运行。
【问题讨论】:
-
&&是一个外壳。这可能不是一个好主意(我不知道如何使用 Sublime Text 3),但设置"shell":true可能会让事情顺利进行。 -
我没有 Sublime Text 3,但它似乎正在工作,它将“gcc”之后的所有输入作为一行发送到 gcc,例如它确实 > gcc "$filename -o .. && ..." 你想以某种方式转义那些双引号。也许制作第二个“cmd”条目?或者可能将 shell 设置为 True。
-
@user2357112 将 shell 更改为 true 后,我收到以下错误消息:gcc:
fatal error: no input files, compilation terminated.而不是gcc: error: &&。所以我猜你对 shell 的看法是正确的,但仍然无法正常工作:/ -
@EugeneK 在添加另一个像这样的 cmd 之后:
cmd:["./${file_base_name}"],现在第一个被覆盖并且文件只在没有编译的情况下运行,这有望显示一些有希望的解决方案。感谢您的建议 -
好吧,另一个猜测。我对 linux 了解不多,但也许在
gcc命令组和filename部分之间放置一个exit或类似的东西可以解决问题。
标签: c gcc sublimetext3 ubuntu-14.04