Как скомпилировать/построить / выполнить проект C++ в Geany?
Я не думаю, что это будет так сложно. Geany явно имеет возможность создавать проекты, добавлять файлы в проекты, компилировать отдельные файлы, но даже после того, как я погуглил его, я не смог найти четкое описание того, как строить и выполнять проект. Это довольно раздражает, потому что мне очень нравится простота Geany и ее чистое, незагроможденное рабочее пространство, но это может быть нарушением сделки.
6 ответов
Geany не компилирует проекты. Вы можете использовать makefile для той же цели; однако вы должны сделать это вручную или использовать внешнюю команду, которая может выяснить зависимости. Команда «make» Geany будет использовать файл make под названием «makefile» по умолчанию, поэтому вы можете просто дать своему файлу make это имя, и все должно быть хорошо.
пример взят из здесь. Вы также можете найти более подробную информацию на этой странице.
чтобы построить проект, просто откройте файл проекта, затем выберите Make в меню Build (shift+F9).
для выполнения меню Build и Execute (F5).
Если проект не компилируется с помощью make (как это обычно делается в Linux), вам также придется редактировать свойства проекта в меню Свойства записи проекта.
Если вам нужны детали, вы также можете прочитать руководство, это может показаться глупым по сравнению с гуглить, но это выглядит довольно ясно для меня. Нажмите клавишу F1.
по данным этой, нажмите F8 для компиляции и F5 для запуска проекта. Сначала вам нужно настроить компилятор, как указано в статье.
Geany строит проекты с помощью внешних команд. Это гибко и позволяет IDE быть языковым агностиком, что позволяет создавать большие и гетерогенные проекты.
Что касается C++, очень просто создать базовый файл Makefile (намного проще, чем в примере выше). Полагаю, ваш проект строит программу под названием «my_program», состоит из файлов my_program.cpp и бар.cpp и ссылки на библиотеку foo. Все что вам нужно это:
my_program: my_program.бар ЧГК.cpp
сохраните это с именем «Makefile» в том же каталоге источников.Теперь вам нужно создать проект Geany, указав, что в базовом каталоге хранится код (и файл Makefile).
компиляция многофайльного проекта C++ с использованием F-ключей Geany требует, чтобы вы сначала настроили Makefile и соответствующие настройки в Geany (как описано в предыдущих ответах); после завершения такой настройки F-ключи в Geany построить выпадающее меню станет полезным для этого конкретного проекта с несколькими файлами.
Если, однако, вы просто хотите быстро скомпилировать многофайловый проект C++ без необходимости настройки Makefile, а также настроек Geany, используйте терминал на внизу он ввести в командной строке инструкцию для компиляции многофайловых проектов:
затем вы можете выполнить исполняемый файл с помощью:
(обратите внимание, что вышесказанное относится к Geany в Linux; я не тестировал вышеуказанные команды в других операционных системах.)
предполагая, что вы настроили ваши пути(щелкните правой кнопкой мыши my computer > properties > advanced system settings > environment variables , просто Google search, что делать дальше) и Mingw правильно, нажмите «set build menu commands» и введите следующее. в том числе «».
это то, что сработало для меня, если вы получите ошибку при попытке построить (после компиляции), которая говорит что-то о некоторых проблемах с разрешениями, то есть b/c Windows UAC блокирует Geany от здания. Вам просто нужно запустить geany как admin, чтобы решить эту проблему.
Источник
Настройка Geany в Linux для программирования AVR микроконтроллеров
Узнаем как настроить среду программирования Geany для разработки программ под AVR микроконтроллеры на языках C (Си) Assembler (Ассемблер). Кратко рассмотрим структуру команд для компиляции, сборки и прошивки программы в микроконтроллер.
Подготовка
Думаю что для начала наиболее подходящей и простой средой для разработки под чипы AVR является Geany. Позже можно попробовать и другие программы, часть из которых была рассмотрена в предыдущей статье, и потом уже самому выбрать ту которая вам подходит больше всего. К тому же никто не мешает использовать несколько сред для разработки вместе, распределяя между ними задачи. Здесь выбор за вами!
Итак, вы уже установили Geany, перейдем к настройке данной среды для удобной разработки программ, но прежде разберемся с встроенным терминалом.
В прошлой статье на рисунке 2, где изображен скриншот Geany, снизу слева нет вкладки с названием «Terminal», если у вас также нет терминала то для появления возможности использовать терминал в Geany необходимо установить пакет libvte9:
Дальше мы настроим среду Geany для удобной компиляции и прошивки микроконтроллера при программировании на языках C и Assembler.
Настройка Geany для AVR Ассемблера
Для улучшенной подсветки синтаксиса AVR Ассемблера выполним команду, которая скачает с оффициального сайта документации шаблон синтаксиса для asm-файлов и сохранит его в домашней директории с настройками для Geany:
Откроем для редактирования в среде Geany какой-нибудь файл с расширением «.asm», можно создать пустой и открыть его. Теперь идем в меню Build — Set Build Commands, откроется окно с настройками для кнопок компиляции, сборки и выполнения. Заполним поля для команд как представлено на рисунке ниже:
Рис. 1. Настройка Geany для компиляции и прошивки микроконтроллеров используя язык AVR Assembler.
Здесь все просто, для каждой из кнопок мы указываем какие из команд нужно выполнять:
- avra —includepath /usr/share/avra/ «%f» — компилируем ASM файл, указав папку c INC-файлами для AVR чипов;
- avr-size %e.hex — смотрим статистику по размеру получившегося HEX-файла;
- avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex — прошиваем микроконтроллер ATmega8 (ключ -p m8) при помощи программы avrdude.
Сочетание символов «%f» — означает подстановку полного имени открытого файла (например my_program.c), а сочетание символов «%e» — подстановку только имени файла без расширения (например my_program).
Если у вас микроконтроллер другого типа то в команде прошивки для avrdude нужно указать соответствующий ключ -p (partno) с типом вашего микроконтроллера. Узнать значение опции для вашего микроконтроллера можно на страничке документации avrdude: http://www.nongnu.org/avrdude/user-manual/avrdude_4.html
В качестве программатора я использую USB ASP, поэтому если вы используете другой программатор то опция «-c usbasp» должна быть изменена. Список поддерживаемых программаторов и значений опций для avrdude приведены на справочной странице: http://www.nongnu.org/avrdude/user-manual/avrdude_12.html .
Более подробно программу avrdude, ее опции, а также использование с программаторами на онове COM или LPT порта мы рассмотрим в следующей статье. Пока что можете оставить все как есть, позже вы всегда сможете изменить настройки команд под любой тип программатора и микроконтроллера.
При компиляции для команды avra мы указывали путь к INC-файлам, что же это такое? — это файлы (расширение «.inc») с набором макросов и предопределений для конкретных моделей микроконтроллеров что нам будут необходимы в процессе написания наших программ на Ассемблере. Посмотреть список доступных файлов под разные модели чипов можно командой в консоли:
Для того чтобы результат прошивки микроконтроллера через avrdude при помощи кнопки Flash отображался во встроенном терминале нужно в настройках терминала Geany (Edit — Preferences — Terminal) установить галочку напротив пункта «Execute programs in the VTE».
Настройка Geany для AVR Си
С настройками для AVR-ассемблера мы разобрались, теперь сделаем настройки кнопок для компиляции, сборки и прошивки программы написанной на языке Си.
Откроем в Geany какой-либо файл с расширением «.c» для редактирования. Снова идем в настройки команд для сборки: меню Build — Set Build Commands.
Делаем настройки как показано на рисунке ниже:
Рис. 2. Настройка Geany для компиляции и прошивки AVR GCC.
Рассмотрим каждую из команд:
- avr-gcc -mmcu=atmega8 -Os %f -o %e.o — компилируем «.c» файл и получаем на выходе объектный файл с расширением».o»;
- avr-objcopy -j .text -j .data -O ihex %e.o %e.hex — создаем на основе файла «.o» файл формата Intel HEX «.hex»;
- avr-size %e.hex — смотрим статистику по размеру получившегося HEX-файла;
- avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex — прошиваем микроконтроллер ATmega8 (ключ -p m8) при помощи avrdude.
Здесь, как и в настройках для Ассемблера, не забываем что для avrdude нужно указать соответствующий ключ «-p» с типом используемого микроконтроллера, а также ключ «-c» с указанным после него типом используемого программатора. Где узнать имя МК и название программатора для использования в этих опциях avrdude было рассмотрено выше.
Кроме того, для компилятора avr-gcc нужно указать свой тип микроконтроллера, это делается при помощи ключа «-mmcu=atmega8». Список микроконтроллеров и их названия для использования в данной опции представлены на страничке документации по GCC: https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html
Заключение
В настройках Geany для кнопок Компиляция-Сборка-Запуск можно указывать не только команды но и скрипты с целыми списками команд на выполнение или же команды для работы с использованием Makefile. Все достаточно просто и удобно!
В следующей статье мы подробно рассмотрим программу avrdude, ее параметры и настройки, приведем примеры запуска программы для чтения и записи разных областей памяти микроконтроллера.
avr-gcc -mmcu=atmega8 -Os %f -o %e.o в папке проекта создается файл main.o
avr-objcopy -j .text -j .data -O ihex %e.o %e.hex а здесь сообщается, что нет файла main.o
И что дальше?
Нужно постараться разобраться как все работает, попробовать выполнить команды для сборки, что установлены в настройках меню, через консоль, а потом проанализировав результаты попробовать отыскать причину ошибки.
Допустим что файл с исходным кодом называется «main.c», а проект с ним размещен в директории «/home/me/avrprojects/main».
Среда Geany перед выполнением следующей команды «avr-gcc -mmcu=atmega8 -Os %f -o %e.o» выполняет подстановку значений:
- %f — имя текущего файла с исходным кодом (путь отсутствует, расширение присутствует) «main.c»;
- %e — имя текущего файла с исходным кодом (путь и расширение отсутствуют) «main».
Делаем подстановки и получаем следующую команду:
Чтобы при выполнении этой команды программа avr-gcc смогла найти файл «main.c» (полный путь к нему не указан), нужно из консоли перейти в директорию где этот файл размещен (сделать директорию текущей, там же потом будет создан файл «main.o»):
Теперь в том же окне консоли можно выполнить приведенную выше команду для компиляции кода — в папке должен появиться объектный файл «main.o».
Переходим к следующей команде: «avr-objcopy -j .text -j .data -O ihex %e.o %e.hex». Выполнив подстановки имен, среда Geany запустит ее в следующем виде:
Выполняем эту команду в том же окне терминала, в результате в директории проекта (где размещены «main.c» и «main.o») должен появиться файл «main.hex».
И в заключение, команда для прошивки через AVRDude: «avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex». Для данного проекта среда Geany запустит ее из текущей директории проекта в следующем виде:
Теперь вам должно быть понятно как среда Geany запускает команды прописанные в меню «Build», как выполняет подстановки имен файлов для построения команд.
Важно заметить что для подстановки вместо «%f» и «%e» программа Geany берет имя текущего файла, который открыт в редакторе исходного кода на момент запуска команды сборки. Поэтому все нажатия кнопок для сборки проекта в Geany нужно выполнять не меняя текущий открытый в редакторе файл исходного кода (не меняя текущую открытую вкладку редактора).
Для работы с одним проектом вместо подстановок «%f» и «%e» можно прописать полные пути ко всем файлам. В таком случае, вместо использования имени файла с текущей открытой вкладки редактора, Geany будет использовать имена файлов с путями которые были указаны прямо в команде.
Для рассмотренного выше примера команды можно переписать вот так:
Эти команды уже можно запускать из любого окна терминала, поскольку к файлам прописаны абсолютные пути, а расположение программ «avr-gcc», «avr-objcopy», «avrdude» операционная система знает уже изначально.
Если эти команды прописать в настройках меню «Build», то текущая открытая вкладка в редакторе уже не будет иметь никакого влияния на выполнение этих команд и подстановку значений имен (в этих командах уже нет подстановок).
Вооружившись пониманием того как это все работает, можно конструировать свои более сложные команды для сборки самых разных проектов, которые написаны на C, ASM, Python и других языках программирования. Можно заполнить пустые поля в настройках меню «Build» своими полезными командами (утилитами) для быстрого их вызова в процессе сборки и разработки проектов.
Geany поставляется с хорошим комплектом документации, для ее вызова достаточно нажать F1 или же выбрать в основном меню «Help» пункт «Help». Там можно найти описание подстановок «%d», «%e», «%f «, «%p», «%l» для настройки меню «Build», а также множество другой полезной информации.
У меня немного другое окошко «Сборка» — Compile и Build присутствуют, затем Lint(не знаю, первый раз вижу такую команду) затем «Собрать», «Собрать заданную цель. «, «Собрать объектный файл», прописаны кирилицей.
Может avr-objcopy -j .text -j .data -O ihex %e.o %e.hex нужно прописАть в «Собрать объектный файл»? Сейчас попробую, если не получится, буду штудировать help.
Спасибо за советы.
Доброго времени суток. В проекте имеется заголовок #include . После выполнения команды avr-gcc -mmcu=attiny13a -Os %f -o %e.o компилятор пишет: fatal error: avr/io.h: No such file or directory. Файлы заголовков находятся тут: /usr/avr/sys-root/include/ (здесь сам файл io.h: /usr/avr/sys-root/include/avr/io.h). Как «привинтить» файлы заголовков? Прописать что-то в команде, или указать где-то в Geany путь к библиотеке заголовков?
Возможно у вас конфликтуют несколько различных инсталляций компилятора и библиотек.
Узнать с какими путями по умолчанию была скомпилирована программа avr-gcc можно запросив информацию о ее версии:
Вот пример значений путей для программы avr-gcc версии 4.9.2 под операционной системой Debian 9:
Смотрим доступные ключи для запуска программы avr-gcc, вызываем встроенную справку:
К использованию доступен ключ «—sysroot=»:
Как следует из его описания, им можно указать корневую директорию для заголовочных файлов и библиотек.
Таким образом, можете попробовать добавить в командную строку, в настройках Geany, свой путь для библиотек, вот пример:
Полезная информация по компиляции и настройке инструментов для AVR на разных операционных системах — http://www.nongnu.org/avr-libc/user-manual/install_tools.html
Установил на скорую руку OpenSUSE Tumbleweed GNU/Linux в VirtualBox. Посмотрел какие доступны пакеты, имеющие отношение к AVR:
Установил связку avr-libc + avrdude + cross-avr-gcc8 + cross-avr-binutils:
Впечатлил размер скачиваемого cross-avr-gcc8 — примерно 1,2Гб.
При попытке скомпилировать какой-то файл с исходным кодом на языке Си, получил такую же ошибку как и у вас.
На одном из англоязычных форумов увидел пример использования опции «-I» для указания пути к директории с заголовочными файлами. Если посмотреть список всех доступных опций командной строки для GCC, то там указано что путь указанный в опции «-I» имеет более высокий приоритет чем системные пути для поиска заголовочных файлов.
Указав путь поиска заголовочных файлов с помощью опции «-I» проблема исчезла, файл скомпилировался:
Попробуйте исправить команду в настройках Geany, добавив «-I /usr/avr/sys-root/include» (только для OpenSUSE).
Огромное спасибо за помощь. Скомпилировалось, но с таким предупреждением: /usr/lib64/gcc/avr/8/ld: warning: -z relro ignored.
Предупреждение возникает в процессе компиляции при вызове программы-линкера «avr-ld» (из пакета avr-binutils), которая по умолчанию запускается, похоже что, с уже не поддерживаемой опцией ‘-z relro’.
RELRO (Relocation Read Only) — механизм защиты структуры исполняемого ELF-файла, о том как он работает можно почитать вот тут.
В avr-binutils версии 2.27,1 были внесены некоторые изменения по отношению к опциям для RELRO, а самая свежая версия сейчас — 2.30 (devel).
Не могу сказать можно ли полностью игнорировать это предупреждение, вероятно что со временем, после очередного обновления, оно исчезнет.
Сделал проброс программатора USBASP через USB-порт в VirtualBox где установлена OpenSUSE, скомпилировал простую программу на Си, прошил в микроконтроллер — работает.
Чувак, ты реально крут. Читаю твои статьи — полезно всё. Хотя у меня и стаж по электронике 27 лет, но с огромным вниманием читаю статьи. Огромное спасибо, что ты не чмо, которое таит в себе зло, а человек, который делится полезной информацией.
Приветствую! Стараюсь систематизировать разную полезную информацию, подавать ее в простом и доступном, по моему мнению, виде. Учитывая ваш отзыв, похоже что у меня это понемногу получается. Спасибо.
Источник