Вчера увидел комментарий, в котором анонимус спрашивал как скомпилировать C приложение из редактора. Наверно, спустя почти неделю, он и сам нашёл решение, но всё же мне самому стало интересно.
Наша задача - скомпилировать HelloWorld из редактора. Для этого есть встроенные средства в виде Tools -> Build (F7, CTRL+B).
Вот наш код HelloWorld:
#include <stdio.h> int main (int argc, char* argv[]) { printf("hello world\n"); return 0; }Как видим из скрина, он предлагает несколько вариантов для компиляции и даже можeт попытаться сам угадать что нужно использовать. У нас есть два варианта прописать собственные команды для компиляции - это через конфигурацию проекта и через общую конфигурацию редактора (как я сделал на скрине - пункт MinGW32-gcc это мой добавленный метод).Рассмотрим первый метод - через написание конфига для редактора в целом. Идём Tools -> Build System -> New Build System..., редактор создаст нам заготовку. Грешу, я сам не все опции изучил, но если есть желание то вот они. Там же и находятся доступные нам переменные символизирующие имя файла, полный путь, расширение и т.д.
То, что у меня получилось:
Заранее я прописал в path системы путь к папке с mingw32-g++.exe. Правда это можно сделать тут двумя способами - либо в "cmd" прописать полный путь до mingw32-g++, либо использовать опцию "path" и уже туда прописать полный путь то папки bin из пакета MinGW.
И ещё одна особенность - в переменных среды windows не должно быть путей с русскими символами, иначе python будет ругаться. У меня по дефолту windows 7 выставила папке пользователя имя Администратор, пришлось делать другую учётную запись, т.к. адекватного способа поменять имя папки я не нашёл (C:\Users\Администратор).
Ну что же, сохраняем наш конфиг с нужным нам именем (оно будет показываться в списке Tools -> Build System). Я назвал его MinGW32-gcc. Сохраняется оно в папочке Data\Packages\User\. Переходим на вкладку с HelloWorld, выбираем наш свежесозданный конфиг в Tools -> Build Sustem и нажимаем F7. Снизу должен появиться результат - [Finished] ну или ошибка. Если там пусто, вызываем консоль (CTRL+~) и смотрим логи.
Так же систему компиляции можно прописать и для проекта.
Создаем проект - (Project -> Save Project As...) ну и сохраняем его в папочке с исходником. далее открываем файл проекта на редактирование (Project -> Edit Project) и видим что то типа этого:
Далее мы будем использовать опцию "build_systems", которая будет добавлять наш метод компиляции в список именно для нашего проекта. Код выглядит так:
"build_systems": [ { "name": "C++", "cmd": ["mingw32-g++.exe", "-o", "$file_base_name", "$file_name"] } ]
Ну и теперь при активации нашего проекта HelloWorld в списке Tools -> Build System будет появляться пункт C++.
Добавлю текст комментария от Анонима:
Господа, представляю вам свой отредактированный оригинальный конфиг. Стоит обратить внимание на то что сказал автор, необходимо создать профиль и пользователя с латинским именем. простое переименование пользователя не переименует папку с профилем. Для того, что бы переименовать пользователя корректно, воспользуйтесь стандартным "средством переноса файлов и параметров" для этого вам нужно будет зайти под другим администратором, упаковать весь профиль с русским именем в архив (обязательно отметте все галочки), затем создайте нового пользователя с латинским именем и распакуйте архив с помощью средства переноса, не забыв указать что вы распаковываете профиль в другого пользователя.
Обязательно выполните это:
В папке с программой ищете файл sublime_plugin.py и в заголовок добавляете:
reload(sys)
sys.setdefaultencoding('utf8')
для того, что бы питон не забывал локаль и не сбоили плагины саблайма.
Также я решил добавить путь к компилятору в системную переменную, что бы не прописывать прямые пути в конфигах. Собственно конфиг:
{
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",
"encoding": "1251",
"variants":
[
{
"name": "Run",
"shell": true,
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "&&", "${file_path}/${file_base_name}"]
}
]
}
В основной секции пришлось добавить указание кодировки 1251, что бы в консоли саблайма корректно отображались сообщения компилятора об ошибках. В варианте "Run" отличие от стандартного конфига состоит в том, что мы определили "shell": true и вместо того, что бы группировать команды для оболочки, чередуя одинарные и двойные кавычки - воспользовались только двойными (одинарные не желают работать в винде), приведя синтаксис к такому же, как в основной секции.
Вот собственно и всё.
Нет сам так и не разобрался.. Огромное спасибо =)
ОтветитьУдалитьСборку через make не захотел осваивать??
ОтветитьУдалитьМожно сделать и через make - в общем то суть не сильно меняется
ОтветитьУдалитьПод linux сделал вот таким образом:
ОтветитьУдалить{
"cmd": ["/usr/bin/g++ -W -Wall -Werror *.cpp"],
"working_dir": "${file_path}",
"shell": true
}
Всё работает, [Finished] показывает, а вот как сразу получившийся файлик a.out запустить?
Я понимаю, что нужно через терминал просто ввести название файла, но я имею в виду как сразу после компиляции автоматически запустить этот файл на выполнение?
попробуй вместо компиляции запускать скрипт который будет компилировать и запускать результат
УдалитьПод Windows это выглядит вот так:
"cmd": ["$packages/User/c++.bat","$file","$file_path","$file_base_name"],
Советую смотреть в сторону консольной команды питона
ОтветитьУдалитьos.system("имя файла")
Помогите советом: проделал все настройки, как указано в данном посте, однако ST2 не компилирует любой cpp-файл выдавая ошибку "UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 4: ordinal not in range(128)".
ОтветитьУдалитьВ чем может быть проблема и как её можно исправить?
Вот вам решение проблемы, сударь.
УдалитьВ папке с программой ищете файл sublime_plugin.py и в заголовок добавляете:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
У меня саблайм из за этой ошибки не только компилировать не хотел, но и пэкэдж контрол вылетал с нею же.
http://www.sublimetext.com/forum/viewtopic.php?f=3&t=6407&start=0&hilit=UnicodeEncodeError
Добрый день!
ОтветитьУдалитьПроделал все как написано, но не заработало. При запуске скомпилированной программы выскакивают ошибки с ненайденными файлами из папки "..\MinGW\bin\", всякие длл-ки и прочее. В чем же проблема? Буду рад, если кто-нибудь отзовется С:
Текст конфига:
"cmd": ["mingw32-g++.exe", "-o", "$file_base_name", "$file_name"],
"path": "c:\\Program Files\\MinGW\\bin\\"
Господа, представляю вам свой отредактированный оригинальный конфиг. Стоит обратить внимание на то что сказал автор, необходимо создать профиль и пользователя с латинским именем. простое переименование пользователя не переименует папку с профилем. Для того, что бы переименовать пользователя корректно, воспользуйтесь стандартным "средством переноса файлов и параметров" для этого вам нужно будет зайти под другим администратором, упаковать весь профиль с русским именем в архив (обязательно отметте все галочки), затем создайте нового пользователя с латинским именем и распакуйте архив с помощью средства переноса, не забыв указать что вы распаковываете профиль в другого пользователя.
ОтветитьУдалитьОбязательно выполните это:
В папке с программой ищете файл sublime_plugin.py и в заголовок добавляете:
reload(sys)
sys.setdefaultencoding('utf8')
для того, что бы питон не забывал локаль и не сбоили плагины саблайма.
Также я решил добавить путь к компилятору в системную переменную, что бы не прописывать прямые пути в конфигах. Собственно конфиг:
{
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",
"encoding": "1251",
"variants":
[
{
"name": "Run",
"shell": true,
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "&&", "${file_path}/${file_base_name}"]
}
]
}
В основной секции пришлось добавить указание кодировки 1251, что бы в консоли саблайма корректно отображались сообщения компилятора об ошибках. В варианте "Run" отличие от стандартного конфига состоит в том, что мы определили "shell": true и вместо того, что бы группировать команды для оболочки, чередуя одинарные и двойные кавычки - воспользовались только двойными (одинарные не желают работать в винде), приведя синтаксис к такому же, как в основной секции.