【问题标题】:How to compile and run C in sublime text 3?如何在 sublime text 3 中编译和运行 C?
【发布时间】: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 可以编译或运行,但不能同时执行这两种操作,希望可以做一些事情以使其通过单个命令编译和运行。

【问题讨论】:

  • &amp;&amp; 是一个外壳。这可能不是一个好主意(我不知道如何使用 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: &amp;&amp;。所以我猜你对 shell 的看法是正确的,但仍然无法正常工作:/
  • @EugeneK 在添加另一个像这样的 cmd 之后:cmd:["./${file_base_name}"],现在第一个被覆盖并且文件只在没有编译的情况下运行,这有望显示一些有希望的解决方案。感谢您的建议
  • 好吧,另一个猜测。我对 linux 了解不多,但也许在gcc 命令组和filename 部分之间放置一个exit 或类似的东西可以解决问题。

标签: c gcc sublimetext3 ubuntu-14.04


【解决方案1】:
{
 "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
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      1.在 Sublime 中创建一个新的构建系统: 工具 > 构建系统 > 新构建系统...

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

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

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

      如果文件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-build重命名为myC.sublime-build,或者你不妨在这里展示你的创造力。只需保持文件扩展名相同即可。

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          “变体”:[

              { "name": "Run",
                "cmd" : ["start", "${file_base_name}.exe"]
              } 
          

          【讨论】:

            【解决方案6】:

            在使用 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}"
                 }
               ]
            }
            

            【讨论】:

              【解决方案7】:

              你在 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"
              }
              

              【讨论】:

                【解决方案8】:

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

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

                【讨论】:

                  【解决方案9】:

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

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

                  并创建一个Build System 来编译并执行它:

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

                  别忘了$chmod +x run.sh

                  做一件事,把它做好:)

                  【讨论】:

                    【解决方案10】:

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

                    how-do-i-compile-and-run-a-c-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"]
                            }
                        ]
                    }
                    

                    【讨论】:

                      【解决方案11】:

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

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

                      或者

                      • 创建文件~/.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

                      【讨论】:

                        【解决方案12】:

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

                        【讨论】:

                        • 我忘了说我使用的是 Ubuntu 14.04
                        • 仍然..我认为它不起作用..我也想知道以崇高的文本运行程序..+1 的问题..也许有人给出答案
                        • 谢谢,目前我可以使用第一个代码块进行编译,但我的问题在于运行程序。希望有人有解决方案(如果可能的话):)
                        【解决方案13】:

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

                        {
                        "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

                        【讨论】:

                        • 对这个解决方案感到好奇,我认为它必须发挥作用。
                        • 感谢这实际上适用于 shell = true;我认为唯一无法解决的问题是从用户那里获得输入。
                        • AFAIK,ST3 在其构建系统中不支持用户输入。
                        • 如果它让未来的编码人员有些头疼,我只想指出,您应该通过转到工具 > 构建系统 > 新构建系统而不是首选项配置将其放在构建系统配置文件中文件(首选项 > 设置 - 更多 > 特定语法)。
                        • 需要进行哪些编辑才能显示编译过程中可能出现的所有警告和错误?
                        猜你喜欢
                        • 1970-01-01
                        • 2013-01-15
                        • 2015-04-09
                        • 2012-05-25
                        • 2014-03-13
                        • 1970-01-01
                        • 2014-02-07
                        • 1970-01-01
                        • 2017-08-16
                        相关资源
                        最近更新 更多