38

我想在 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 可以编译或运行,但不能同时进行,希望可以做一些事情来使其通过单个命令编译和运行。

4

13 回答 13

43

您是否尝试过将整个命令写在一个字符串中?

{
"cmd" : ["gcc $file_name -o ${file_base_name} && ./${file_base_name}"],
"selector" : "source.c",
"shell": true,
"working_dir" : "$file_path"
}

我相信(这里是半推测),ST3 将第一个参数作为“程序”并将其他字符串作为“参数”传递。https://docs.python.org/2/library/subprocess.html#subprocess.Popen

于 2014-06-15T01:17:38.640 回答
28

对于实现运行菜单命令的崇高构建系统:

  • 转到工具->构建系统->新建构建系统...

或者

  • 创建文件~/.config/sublime-text-3/Packages/User/GCC.sublime-build

并插入:

{
"shell_cmd" : "gcc $file_name -o ${file_base_name}",
"working_dir" : "$file_path",
"variants":
  [
    {
      "name": "Run",
      "shell_cmd": "gcc $file_name -o ${file_base_name} && ${file_path}/${file_base_name}"
    }
  ]
}

*此示例使用 GCC 编译器。随意替换gcc为您选择的编译器。

于 2015-01-14T02:42:44.323 回答
4

在互联网上进行了严格的代码搜索会话之后,我终于想出了一个解决方案,它可以让您在C99中的专用终端窗口中“同时”编译 + 运行您的 C 代码。我知道,有些人不喜欢C99。我也不喜欢几个人。

在大多数情况下,Sublime编译并运行代码,但在 C90 或更低版本中。因此,如果您特别希望它是 C99,这就是要走的路。

注意顺便说一句,我是在 Windows 机器上做的,不能保证别人!它可能不会在那里工作。

1.在Sublime中新建一个构建系统: Tools > Build System > New Build System...

新的构建系统

untitled.sublime-build2.将创建一个名为的新文件。

很可能,Sublime 会为你打开它。

如果没有,请转到首选项 > 浏览包 > 用户

打开新的 sublime-build

如果文件untitled.sublime-build 在那里,则打开它,如果它不存在,则手动创建打开它

3. 将下面给出的代码复制并粘贴到上述untitled.sublime-build文件中并保存。

{
    "windows":
    {
        "cmd": ["gcc","-std=c99" ,"$file_name","-o", "${file_base_name}.exe", "-lm", "-Wall", "&","start", "${file_base_name}.exe"]
    },
    "selector" : "source.c",
    "shell": true,
    "working_dir" : "$file_path",
}

关闭文件。你快完成了!

4. 最后将你的文件从 重命名untitled.sublime-buildmyC.sublime-build,或者你不妨在这里展示你的创造力。只需保持文件扩展名相同即可。

5. 最后当前的构建系统设置为您在上一步中编写的文件名。在这种情况下,它是myC

更新当前构建系统

瞧!通过Tools > Build使用 C99编译 + 运行您的 C 代码,或者只需按Ctrl + B

于 2017-08-07T13:28:19.837 回答
3

我们可以在 Sublime Text 中编译 C 的代码,并且可以打印一些值或字符串,但它接受用户的输入。(直到我知道......我确定编译但不是来自给定输入的输出。)如果您使用的是 Windows,则必须为 Sublime Text 和 GCC 编译器设置环境变量。

于 2014-06-14T23:56:55.910 回答
1

说明基于“冰瓜”帖子。帖子链接:

如何-我-编译-运行-ac-program-in-sublime-text-2

使用下面的链接了解如何在您的操作系统上设置环境变量:

c_environment_setup

以下指令在 Windows 8.1 系统和 Sublime Text 3 - build 3065 上进行了测试。

1)安装MinGW。2) 在“PATH 环境变量”中添加“MinGW\bin”的路径。

“系统属性-> 高级-> 环境”变量并更新“PATH”变量。

3)然后通过“命令提示符”中的以下命令检查您的PATH环境变量:

echo %path%

4) 将新的构建系统添加到 Sublime Text。

我的以下代码版本(“C.sublime-build”)。

代码链接:

C.sublime-build

// Put this file here:
// "C:\Users\[User Name]\AppData\Roaming\Sublime Text 3\Packages\User"
// Use "Ctrl+B" to Build and "Crtl+Shift+B" to Run the project.
// OR use "Tools -> Build System -> New Build System..." and put the code there.

{
    "cmd" : ["gcc", "$file_name", "-o", "${file_base_name}.exe"],

    // Doesn't work, sublime text 3, Windows 8.1    
    // "cmd" : ["gcc $file_name -o ${file_base_name}"],

    "selector" : "source.c",
    "shell": true,
    "working_dir" : "$file_path",

    // You could add path to your gcc compiler this and don't add path to your "PATH environment variable"
    // "path" : "C:\\MinGW\\bin"

    "variants" : [

        { "name": "Run",
          "cmd" : ["${file_base_name}.exe"]
        }
    ]
}
于 2015-04-18T07:56:04.107 回答
1

sublime 的最新版本甚至允许直接命令而不是双引号。为构建系统尝试以下代码

{
    "cmd" : ["gcc $file_name -o ${file_base_name} && ./${file_base_name}"],
    "selector" : "source.c",
    "shell": true,
    "working_dir" : "$file_path",
}
于 2016-06-15T14:21:03.453 回答
1

最好的方法是为您的项目使用 Makefile,ST3 将自动为您的项目检测构建系统。例如。如果你按 shift + ctrl/cmd +B 你会看到: 制作

于 2017-10-12T21:07:03.057 回答
0

尝试在您的项目文件夹中编写一个名为 run.sh 的 shell 脚本

#!/bin/bash
./YOUR_EXECUTIVE_FILE
...AND OTHER THING

并 make aBuild System编译并执行它:

{
      "shell_cmd": "make all && ./run.sh"
}

不要忘记$chmod +x run.sh

做一件事并做好:)

于 2015-04-26T23:17:05.777 回答
0
{
 "cmd": ["gcc", "-Wall", "-ansi", "-pedantic-errors", "$file_name", "-o", 
 "${file_base_name}.exe", "&&", "start", "cmd", "/k" , "$file_base_name"],
 "selector": "source.c",
 "working_dir": "${file_path}",
 "shell": true
}

它在命令提示符下接受输入并显示输出。

于 2021-01-18T08:17:48.843 回答
0

在 Sublime Text 3 中......尝试将上面的代码更改为此,注意添加“开始”......

“变体”:[

    { "name": "Run",
      "cmd" : ["start", "${file_base_name}.exe"]
    } 
于 2017-06-14T19:55:11.660 回答
0

在使用 Sublime Text 3 的 Windows 10 机器上为我工作的代码

 {
 "cmd" : "gcc $file_name -o ${file_base_name}",
 "selector" : "source.c",
 "shell" : true,
 "working_dir" : "$file_path",
 "variants":
    [
     {
      "name": "Run",
      "cmd": "${file_base_name}"
     }
   ]
}
于 2017-01-08T12:45:55.463 回答
0

如果您编写 C 或 C++ 语言。我认为我们很幸运,因为我们可以使用文件进行输入。它是如此方便和清晰。我经常这样做。这是实现它的论据:

{
freopen("inputfile", "r", stdin);
}

注意输入文件必须与源代码文件位于同一目录,r 代表读取。

于 2017-07-26T10:44:21.673 回答
0

你在 linux 上使用 sublime text 吗?我遇到了同样的问题,它已经解决了!这是我的 c.sublime-build:

{
 "shell_cmd" : "gcc $file_name -o $file_base_name && ./$file_base_name", 
 "selector" : "source.c",
 "shell":true,
 "working_dir" : "$file_path"
}
于 2016-06-27T15:54:45.300 回答