Как компилировать программы на си

Пример взят из SDL Documentation. Назовите его test.cxx и давайте попробуем его собрать. g++ -O3 -o test test.cxx -I/usr/include/SDL -L/usr/lib -lSDL Флаг -O3 задает уровень оптимизации ( -O3 задает максимальный уровень, по умолчанию используется -O2 ). Флаг -o задает имя программы на выходе.
Все остальное я уже рассказал. Но существует более элегантный способ задать флаги компиляции SDL. Просто выполните команду sdl-config —cflags —libs . Все необходимые для компиляции флаги SDL будут на выходе этой программы. То есть мы могли бы сделать так:
g++ -O3 -o test test.cxx `sdl-config —cflags —libs` Где эту команду нужно поместить между знаков ` (это там где тильда ~ ). Если проект большой и состоит из многих файлов, то компилировать каждый неудобно и сложно. По этому приготовьтесь получить CRASH-курс по утилите make . Наверно не раз собирали какую-нибудь программу, набирая в консоли make . Согласитесь, это гораздо проще, чем компилировать каждый файл проекта примерно так же, как я показывал (см. выше). Чтобы работать с утилитой make , вы должны создать файл с именем «Makefile» в директории с проектом. Теперь возьмем пример простого make-файла для нашей тестовой программы, чтобы было легче разобраться:

Компиляция кода на Си с помощью gcc на Linux Mint 20


TARGET = test LIBS = `sdl-config —libs` CFLAGS = -O3 `sdl-config —cflags` CC = g++ all: $(CC) $(CFLAGS) -c test.cxx -o test.o $(CC) -o $(TARGET) test.o $(LIBS) strip $(TARGET) clean: rm *.o rm $(TARGET)
На первый взгляд немного сложно, но только на первый. И так, начнем по порядку. В верхней части мы задаем переменные: TARGET — имя программы на выходе, LIBS — какие библиотеки использовать, CFLAGS — уровень оптимизации и путь к заголовочным файлам библиотеки SDL , CC — имя выполняемого файла компилятора. Использовать переменные нужно так: $(ПЕРЕМЕННАЯ) , т.е. заключать в круглые скобки и перед скобками ставить знак доллара. С переменными все ясно (надеюсь), теперь дальше: в make-файлах самое главное это так называемые цели (target). В нашем примере две цели — это all и clean. С новой строки мы пишем правила для сборки цели — команды, которые нам нужны. Не забудьте начинать каждую строку правил с нажатия кнопки TAB. Это обязательно. Если получите ошибку make-файла, то в первую очередь проверьте, расставлены ли знаки табуляции. Очень удобно в этом плане использовать редактор Midnight Commander, который подсвечивает табуляцию. В нашем случае мы сначала создаем object-файл, а потом программу. Строка
$(CC) $(CFLAGS) -c test.cxx -o test.o
эквивалентна
g++ -O3 -I/usr/include/SDL -c test.cxx -o -test.o
Опция компилятора -с указывает, что нужно пропустить финальную стадию компиляции (линковку), а создать только объектный файл. И следующая строка
$(CC) -o $(TARGET) test.o $(LIBS)
эквивалентна
g++ -o test test.o -I/usr/lib -lSDL
Пути могут отличаться в зависимости от системы. Команда strip оптимизирует исполняемый файл программы. Цель clean удаляет объектные файлы и запускаемый файл программы. Чтобы выполнить цель clean нужно выполнить команду make clean . Для выполнения цели all достаточно просто выполнить команду make . На самом деле синтаксис make-файлов гораздо обширнее и сложнее, но если овладеть им, то ваша жизнь облегчится во много раз. В интернете можно найти очень много информации по утилите make . Здесь я описал только самые основы, но с помощью таких же make-файлов мы и будем компилировать примеры из уроков.

Читайте также:
Как настроить программы на телевизоре Sony Bravia
Устанавливаем SDL Содержание Урок 1

Просмотр 0 веток ответов

Язык Си: компиляция в Visual Studio Code ПРОСТО

Источник: pro-prof.com

Как компилировать программы на си

Лорн живет в Чикаго и работает консультантом по информатике, специализируясь по вводу-выводу для баз данных Oracle. Сделав когда-то выбор — программировать исключительно в среде *nix — Лорн полностью избежал ‘Ада DLL’. Сейчас он работает над своей ученой степенью по информатике.

  • Правила GCC
  • В начале.
  • Препроцессинг(Pre-compile)
  • Компиляция (Compile)
  • Ассемблирование(Assembly)
  • Компоновка(Link)
  • Две очень важные опции
  • Отладка(Debugging)
  • Заключение
  • Ссылки

GCC — корень всего

Эта статья предполагает, что Вы знакомы с основами языка Си, и хочет познакомить Вас с использованием gcc в качестве компилятора. Мы хотим быть уверенными, что Вы сможете вызвать компилятор из командной строки для простого кода на Си. Затем мы сделаем краткий обзор того, что же на самом деле происходит, и того, как Вы можете контролировать компиляцию Ваших программ. Также мы очень кратко рассмотрим использование отладчика.

Правила GCC

В начале.

Во-первых,однако, мы должны знать, как вызвать компилятор в первый раз. Это действительно просто. Мы начнем с вечной классической первой программы на Си. (Старики должны меня простить).

#include int main()

Сохраните этот файл с именем game.c . Вы можете скомпилировать его из командной строки, запустив:

gcc game.c

По умолчанию, компилятор Си создает исполняемый файл с названием a.out . Вы можете запустить его, набрав:

a.out Hello World

Всегда, когда Вы компилируете программу, новый a.out будет замещать предыдущую программу. Вы не можете сказать, какая из программ создала текущий a.out . Мы можем решить эту проблему, сообщив gcc, как мы хотим назвать исполняемый файл, с помощью ключа -o . Мы хотим назвать эту программу game , хотя мы могли бы назвать ее как угодно, поскольку Си не имеет ограничений на имена, которые дает Java.

gcc -o game game.c
game Hello World

В этом месте мы еще очень далеки от получения полезной программы. Если Вы думаете, что это плохо, Вы можете принять во внимание факт, что у нас есть программа, которая компилируется и работает. Как только мы мало-помалу начнем добавлять программе функциональности, мы захотим убедиться в том, что программа осталась работоспособной.

Известно, что каждый начинающий программист хочет написать 1,000 строк исходного кода, а затем сразу их исправить. Я думаю, что никто этого не сможет. Вы создаете маленькую работающую программу, Вы изменяете ее и вновь заставляете ее работать. Это ограничит количество ошибок, которые Вам нужно будет исправить за один раз.

Плюс к тому, Вы точно знаете, что Вы сделали и это не работает, так что Вы знаете, на чем сосредоточиться. Это сдержит Вас от создания чего-то, что, по Вашему мнению должно работать, и возможно даже компилируется, но никогда не станет исполняемым файлом. Помните — то, что программа компилируется, вовсе не означает, что она верна.

Читайте также:
Лучшие программы для записи Андроид

Следующий шаг — создание заголовочного файла для нашей игры. Заголовочный файл собирает в одном месте типы данных и описания функций. Это обеспечивает единообразное определение структур данных, так что каждая часть нашей программы воспринимает что-либо одинаково.

#ifndef DECK_H #define DECK_H #define DECKSIZE 52 typedef struct deck_t < int card[DECKSIZE]; /* number of cards used */ int dealt; >deck_t; #endif /* DECK_H */

Сохраните этот файл как deck.h . Так как компилируются только файлы .c , мы должны изменить наш game.c. В строке 2 файла game.c, напишите #include «deck.h» . В строке 5, напишите deck_t deck; Чтобы убедиться, что мы ничего не сломали, скомпилируйте его снова.

gcc -o game game.c

Нет ошибок — нет проблем. Если он не компилируется, поработайте с ним, пока он не заработает.

Откуда компилятор знает, какого типа deck_t ? Потому что во время препроцессинга он действительно копирует файл «deck.h» в файл «game.c». Директивы препроцессора в исходном коде предваряются префиксом «#». Вы можете вызвать препроцессор через надстройку gcc с помощью ключа -E .

gcc -E -o game_precompile.txt game.c wc -l game_precompile.txt 3199 game_precompile.txt

  1. Копирует «включаемые(#include)» файлы в компилируемый исходный файл.
  2. Заменяет «определяемый(#define)» текст действительными значениями.
  3. Заменяет макросы в строках, в которых они вызываются.

В качестве промежуточного шага, gcc транслирует Ваш код в язык Ассемблера. Чтобы сделать это, он должен представить, что Вы имели в виду, разбирая Ваш код. Если Вы сделали синтаксическую ошибку, он сообщит Вам об этом и компиляция прервется. Люди иногда ошибочно думают, что это единственный шаг всего процесса. Однако для gcc остается еще очень много работы.

as переводит код на Ассемблере в объектный код. Объектный код не может реально работать в процессоре, но он очень близок к этому. Опция компилятора -c превращает файл .c в объектный файл с расширением .o. Если мы запускаем

gcc -c game.c

Программирование под Linux. Компилятор языка С в linux

Помню, когда я только начинал программировать, у меня возник вопрос: «Как скомпилировать программу на C в Ubuntu?» Для новичков это не легкая задача, как может показаться на первый взгляд.

Мой путь изучения C начался с бестселлера «Брайан Керниган, Деннис Ритчи, Язык программирования C, 2-е издание» . Там рассказывается как скомпилировать программу в операционной системе Unix, но этот способ не работает в Linux. Авторы книги выкрутились, написав следующее:

В других системах это процедура будет отличаться. Обратитесь к справочнику или специалисту за подробностями.

Побуду специалистом:) и расскажу в данной статье, как скомпилировать первые программы на C и заодно на C++ в терминале Ubuntu.

Текстовый редактор gedit

Для написания первых программ подойдет обычный, используемый по умолчанию в Ubuntu, текстовый редактор с подсветкой синтаксиса — gedit.

Рис. 1. Запуск текстового редактора.

Первой программой по традиции является «Hello, World!» , выводящее приветствие на экран:

#include int main(int argc, char **argv) < puts(«Hello, world!»); return 0; >
Печатаем или копируем текст программы в gedit и сохраняем в файл Hello.c , например, на рабочий стол. Не самое лучше место для сохранения, но это позволит рассмотреть случай, когда в имени директории содержится пробел.

Читайте также:
Пример программа работ по обследованию зданий
Рис. 2. Программа hello, World.

Компиляция программы на C

Теперь запускаем терминал, можно через Dash, а можно с помощью горячих клавиш + + . Здесь в начале установим инструменты сборки, куда входят необходимые компиляторы gcc для языка C и g++ для языка C++:

Sudo apt install build-essential
Для установки требуется ввести пароль, при вводе которого может сложиться впечатление, что ничего не происходит, но на самом деле терминал просто в целях безопасности не отображает символы.

Далее в терминале нам необходимо перейти в директорию, куда сохранили файл с текстом программы. Перемещение выполняется командой cd (англ. change directory — изменить каталог). Чтобы воспользоваться командой в начале пишется cd , затем через пробел путь, куда нужно перейти.

Для перехода на рабочий стол, команда будет следующей:

Cd ~/Рабочий стол
Обратите внимание на символ обратной косой черты в имени директории Рабочий стол. Обратная косая экранирует пробел, и сообщает команде cd , что пробел и следующие за ним символы являются частью имени. Символ ~ в начале пути обозначает путь до домашней папки пользователя.

Для просмотра содержимого директории применяется команда ls (сокращение от англ. list).

Команда компиляции для программы на C выглядит следующим образом:

Gcc -Wall -o hello hello.c
где:

  • gcc — компилятор для языка программирования C;
  • -Wall — ключ вывода всех предупреждений компилятора;
  • -o hello — с помощью ключа -o указывается имя выходного файла;
  • hello.c — имя нашего исходного файла, который компилируем.

В завершение запустим hello , вводом имени программы с префиксом./ :

./hello
Префикс./ сообщает терминалу о необходимости выполнить программу с заданным именем в текущем каталоге. (Точка — это условное название текущего каталога.)

Компиляция программы на С++

Программы на C++ компилируются аналогично, как и программы на C. «Hello, World!» на C++ можно написать так:

Данная строка представляет директиву препроцессора, которая позволяет подключить библиотеку iostream. Эта библиотека нужна для вывода строки на консоль.

Функция main состоит из четырех элементов:

Тип возвращаемого значения . В данном случае это тип int . Этот тип указывает, что функция должна возвращать целое число.

Имя функции . В данном случае функция называется main.

Список параметров . После имени функции в скобках идет список параметров. Но в данном случае скобки пустые, то есть функция main не принимает параметров.

Тело функции . После списка параметров в фигурных скобках идет тело функции. Здесь и определяются собственно те действия, которые выполняет функция main.

Затем в консоли зайдите в каталог проекта. Наберите команду

Теперь посмотрите внимательно, что произошло. В каталоге появился новый файл a.out. Это и есть исполняемый файл. Запустим его. Наберите в консоли:

Программа должна запуститься, то есть должен появиться текст:

Компилятор gcc по умолчанию присваивает всем созданным исполняемым файлам имя a.out. Если хотите назвать его по-другому, нужно к команде на компиляцию добавить флаг -o и имя, которым вы хотите его назвать. Давайте наберём такую команду:

gcc hello.c -o hello

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru