【问题标题】:Sublime Text 3 compile and run (in terminal) C on OS X with passed argumentsSublime Text 3 在 OS X 上使用传递的参数编译和运行(在终端中)C
【发布时间】:2015-12-01 05:04:18
【问题描述】:

我正在尝试在 Sublime Text 3 中编译一个 C 程序,然后在 OS X Yosemite 上的终端(通过 Sublime Text 打开)中运行它。我的构建系统是:

{
    "cmd": ["gcc", "${file}", "-o", "${file_path}/${file_base_name}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c",

    "variants":
    [
        {
        "name": "Run",
        "cmd": ["bash", "-c", "gcc '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        }
    ]
}

当我构建时,例如,test.c,它编译得很好。当我运行程序时,我得到这个:bash: line 1: 916 Segmentation fault: 11。我确定这是因为我的程序需要传递给它的参数。

所以我有两个问题:

  1. 如何更改构建系统,以便在运行它时打开终端并在其中运行?

  2. 如何在程序运行之前将参数传递给程序?例如,在 Linux 上,我会输入 ./test hello 20932aa,它会运行良好。如何在 Sublime Text 3 (OS X Yosemite) 上实现同样的效果。

【问题讨论】:

  • OS X 也有终端。如果你愿意,你可以使用它。
  • 是的,我知道,但我希望 Sublime Text 在构建代码时打开它。这是我必须做的额外步骤。
  • 我不知道您是否可以在每次运行中传递不同的参数,但在与上述相同的构建文件中,您可以在最后一行(最后一个 cmd ) 你可以写: "cmd": ["bash", "-c", "gcc '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name } 你好 20932aa'"].
  • @JordyBaylac 最后说没有目录被命名为test hello 20932aa

标签: c macos gcc build sublimetext3


【解决方案1】:

这就是您在构建系统中在 ST3 中编译和运行 C 代码所需的全部内容。只需将 arg1 arg2 arg3 替换为您的参数并保存您的构建系统,然后再像往常一样在 C 程序上使用 Tools -> Build

&& 运算符允许您在运算符之后执行另一个 "shell_cmd"(shell 命令)。

{
    "shell_cmd": "make ${file_base_name} && ./${file_base_name} arg1 arg2 arg3"
}

或者,这是一个包含所有花里胡哨的构建系统。

{
    "shell_cmd" : "gcc $file_name -o ${file_base_name}",
    "working_dir" : "$file_path",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "gcc $file_name -o ${file_base_name} && ${file_path}/${file_base_name} arg1 arg2 arg3"
        }
    ]
}

如果您希望程序在新的终端窗口中打开,请使用此构建系统。但是,您将无法向它传递参数。

{
    "shell_cmd": "make ${file_base_name} && open -a Terminal.app ${file_path}/${file_base_name}",
}

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2014-02-07
    • 2013-11-01
    • 1970-01-01
    • 2014-08-05
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多