2015-09-05 1 views
2

Я пытаюсь скомпилировать C-программу в Sublime Text 3, затем запустить ее в терминале (который открывается через Sublime Text) в OS X Yosemite. Моя система сборки:Sublime Text 3 скомпилировать и запустить (в терминале) C на OS X с переданными аргументами

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

OS X также есть терминал. Вы можете использовать это, если хотите. – dietbacon

+0

Да, я знаю, но я хочу, чтобы Sublime Text открывал его, когда я создаю код. Это еще один шаг, который мне нужно будет сделать. –

+0

Я не знаю, можете ли вы передать другой аргумент в каждом прогоне, но в том же файле сборки, что и выше, вы можете указать аргумент, как пример «в последней строке (последний cmd), которую вы можете написать:« cmd ": [" bash "," -c "," gcc '$ {file}' -o '$ {file_path}/$ {file_base_name}' && '$ {file_path}/$ {file_base_name} hello 20932aa' "]. –

ответ

1

Это все, что вам нужно в вашей сборке для компиляции и запуска кода C в ST3. Просто замените arg1 arg2 arg3 своими аргументами и сохраните свою систему сборки, прежде чем использовать Tools -> Build в своей программе на C, как обычно.

Оператор && позволяет выполнить еще один "shell_cmd" (команда оболочки) после оператора.

{ 
    "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}", 
} 
Смежные вопросы