Sublime Text 3使用传递的参数在OS X上编译并运行(在终端中)C

时间:2015-09-05 00:10:21

标签: c macos gcc build sublimetext3

我正在尝试在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)上实现相同目的。

1 个答案:

答案 0 :(得分: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}",
}