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

标签 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 failure: 11。我确信这是因为我的程序需要传递给它的参数。

所以我有两个问题:

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

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

最佳答案

这就是您在构建系统中在 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}",
}

关于c - Sublime Text 3 在 OS X 上使用传递的参数编译并运行(在终端中)C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32408206/

相关文章:

c - gcc C 编译器是用 C 本身编写的吗?

c++ - GCC 的 TSAN 报告与线程安全静态本地的数据竞争

c++ - 使用 -g 和不使用 -DNDEBUG 选项的链接时间非常长

c++ - shellexecute() 函数打开链接文件不起作用,不知道为什么?

c++ - 如何根据文本文件在 C 和 C++ 中的启动方式仅加载某些行?

xcode - 创建新的基于文档的核心数据项目时出现问题

ruby-on-rails - 在 OSX 10.9 Mavericks 错误崩溃报告上运行 Rails 的应用程序时出错

objective-c - 是否可以在操作系统或编程语言级别强制执行无共享多线程? (OSX, Objective-C )

c - strcat 连接 a 和 b 而不实际更改 a 或 b

c - 在c中使用do while循环来表示yes no提示