Компиляция

За и против

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

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

Основное преимущество интерпретации — гибкость. Можно не только запускать интерпретируемую программу на любом процессоре или платформе, для которых интерпретатор был скомпилирован. Написанный интерпретатор может предложить дополнительную гибкость. В определенном смысле интерпретаторы проще понять и написать, чем компиляторы.

С помощью интерпретатора проще добавить дополнительные функции, реализовать такие элементы, как сборщики мусора, а не расширять язык.

Другим преимуществом интерпретаторов является то, что их проще переписать или перекомпилировать для новых платформ.

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

Самым большим недостатком интерпретаторов является скорость. Для каждой программы выполняется так много переводов, фильтраций, что это приводит к замедлению работы и мешает выполнению программного кода.

Это проблема для конкретных real-time приложений, таких как игры с высоким разрешением и симуляцией. Некоторые интерпретаторы содержат компоненты, которые называются just-in-time компиляторами (JIT). Они компилируют программу непосредственно перед ее исполнением. Это специальные программы, вынесенные за рамки интерпретатора. Но поскольку процессоры становятся все более мощными, данная проблема становится менее актуальной.

Обзор компиляторов

Существует множество компиляторов с языка C++, которые можно использовать для создания исполняемого кода под разные платформы. Проекты компиляторов можно классифицировать по следующим критериям.

  1. Коммерческие и некоммерческие проекты
  2. Уровень поддержки современных тенденций и стандартов языка
  3. Эффективность результирующего кода

Если на использование коммерческих компиляторов нет особых причин, то имеет смысл использовать компилятор с языка C++ из GNU коллекции компиляторов (GNU Compiler Collection). Этот компилятор есть в любом дистрибутиве Linux, и, он, также, доступен для платформы Windows как часть проекта MinGW (Minumum GNU for Windows). Для работы с компилятором удобнее всего использовать какой-нибудь дистрибутив Linux, но если вы твердо решили учиться программировать под Windows, то удобнее всего будет установить некоммерческую версию среды разработки QtCreator вместе с QtSDK ориентированную на MinGW. Обычно, на сайте производителя Qt можно найти инсталлятор под Windows, который сразу включает в себя среду разработки QtCreator и QtSDK. Следует только быть внимательным и выбрать ту версию, которая ориентирована на MinGW. Мы, возможно, за исключением особо оговариваемых случаев, будем использовать компилятор из дистрибутива Linux.

GNU коллекция компиляторов включает в себя несколько языков. Из них, группу языков Си составляет три компилятора.

  1. g++ — компилятор с языка C++.
  2. gcc — компилятор с языка C (GNU C Compiler).
  3. gcc -lobjc — Objective-C — это, фактически, язык C с некоторой макро-магией, которая доступна в объектной библиотеке objc. Ее следует поставить и указать через ключ компиляции -l.

Средства сборки проекта

Традиционно, программа на языке C++ собирается средствами утилиты make исполняющей сценарий из файла Makefile. Сценарий сборки можно писать самостоятельно,
а можно создавать его автоматически с помощью всевозможных средств организации проекта. Среди наиболее известных средств организации проекта можно указать следующие.

  1. GNU Toolchain — Старейшая система сборки проектов известная еще по сочетанию команд configure-make-«make install».
  2. CMake — Кроссплатформенная система сборки, которая позволяет не только создать кроссплатформенный проект но и создать сценарий компиляции под любые известные среды разработки, для которых написаны соответствующие генераторы сценариев.
  3. QMake — Достаточно простая система сборки, специально реализованная для фреймворка Qt и широко используемая именно для сборки Qt-проектов. Может быть использована и просто для сборки проектов на языке C++. Имеет некоторые проблемы с выявлением сложных зависимостей метакомпиляции, специфической для Qt, поэтому, даже в проектах Qt, рекомендуется использование системы сборки CMake.

Современные версии QtCreator могут работать с проектами, которые используют как систему сборки QMake, так и систему сборки CMake.

Как выполняется компиляция?

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

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

Дальше идет синтаксический анализ и преобразование исходного кода в объектный код, без этого этапа можно было бы и обойтись, но это необходимо, чтобы компилятор мог выполнить различные оптимизации, сделать размер конечной программы меньше, а команды процессора эффективнее.

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

Следующие шаги

Этот пример «Hello, World» является самой простой программой C. Реальные программы выполняют полезные действия и имеют файлы заголовков, дополнительные исходные файлы и ссылки на библиотеки.

Вы можете использовать шаги, описанные в этом пошаговом руководстве для C, для создания собственного кода, чтобы не вводить приведенный пример. Вы также можете выполнить сборку различных примеров кода на C, которые можно найти в других местах. Чтобы скомпилировать программу с дополнительными файлами исходного кода, введите их все в командной строке, например:

Компилятор выдает программу с именем file1.exe. Чтобы изменить имя на program1.exe, добавьте параметр компоновщика /out:

Чтобы автоматически перехватывать другие ошибки программирования, рекомендуется выполнить компиляцию с помощью порога предупреждений /W3 или /W4:

Компилятор cl.exe имеет множество других параметров, которые можно применять для создания, оптимизации, отладки и анализа кода. Чтобы просмотреть краткий список, введите в командной строке разработчика. Можно также выполнять компиляцию и компоновку отдельно и применять параметры компоновщика в более сложных сценариях сборки. Дополнительные сведения о параметрах и использовании компилятора и компоновщика см. в справочнике по сборке для C/C++.

Для настройки и создания более сложных проектов в командной строке можно использовать NMAKE и файлы makefile либо MSBuild и файлы проекта. Дополнительные сведения об использовании этих средств см. в разделах Справочник по NMAKE и MSBuild.

Языки C и C++ похожи, но имеют различия. Компилятор Microsoft C/C++ (MSVC) использует простое правило для определения языка, используемого при компиляции кода. По умолчанию компилятор MSVC рассматривает все файлы с расширением .c как исходные файлы на языке С, а файлы с расширением .cpp как исходные файлы на языке С++. Если указан параметр компилятора /Tc, компилятор будет рассматривать все файлы как исходные файлы на языке С вне зависимости от расширения.

Компилятор MSVC совместим со стандартом ISO C99, но строго соответствует ему. В большинстве случаев переносимый код на языке C будет компилироваться и выполняться должным образом. Visual C++ обеспечивает поддержку изменений в ISO C11/C17. Чтобы выполнить компиляцию с поддержкой C11/C17, используйте флаг компилятора или . Некоторые функции библиотеки и имена функций POSIX являются нерекомендуемыми в компиляторе MSVC. Функции поддерживаются, но предпочтительные имена изменились. Дополнительные сведения см. в статьях Функции безопасности в CRT и Предупреждение компилятора (уровень 3) C4996.

Музыка

В музыкальном бизнесе под компиляцией подразумевается некий музыкальный сборник, включающий в себя песни и мелодии на определённую тематику.

Наиболее часто встречающимися музыкальными компиляциями можно назвать сборники разных исполнителей, объединённых одним временем их написания — «Дискотека 80-х (90-2000-х)», или «Хит-парады» от различных студий звукозаписи или радиостанций.

Также компиляцией называется сборник одного исполнителя, составленный из песен, входящих в различные альбомы, или написанные в различные периоды его творческой деятельности.

Классические компиляции

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

  • Сборник лучших хитов определённого исполнителя. Часто выходят в виде коллекционных дисков. Если же певец до сих пор записывает новые вещи, то в подобные сборники могут включаться одно-два новых произведения, чтобы фанаты только ради них приобрели диск целиком.
  • Раритетные сборники одного исполнителя. В них обычно включаются ранее не выходившие версии песен, внестудийные записи, «квартирники» и прочие ценные для фанатов и «музыкальных гурманов» вещи.
  • Полный набор дисков, охватывающий всё творчество определённой группы или певца. Также подобные коллекции могут охватывать обширные по временным рамкам музыкальные произведения определённого жанра – рок-н-ролл, рок, джаз и т.п.
  • Сборники, составленные по какой-либо определённой теме. Например, песни о любви, армейские песни, студенческий фольклор.
  • Хит-парады. Обычно выпускаются в рамках танцевальной поп-музыки, и представляют лучших исполнителей по разным версиям за последний год.  
  • Семплеры. Сборники молодых, но перспективных исполнителей, выпускаемые звукозаписывающими компаниями на деньги продюсерских центров в рекламных целях. Распространяются бесплатно, либо за чисто символическую плату. Выпуск семплеров организуется для «раскрутки» определённого, ещё малоизвестного певца или группы. Семплеры могут предназначаться для широкой публики, или для внутрикорпоративного использования – для продюсеров, редакторов телерадиостанций.

Особенность подключения пользовательских библиотек в Си

Подключение пользовательской библиотеки в Си на самом деле не так просто, как кажется.

Рассмотрим пример: есть желание вынести часть кода в отдельный файл — пользовательскую библиотеку.

program.c

#include «mylib.h»const int MAX_DIVISORS_NUMBER = 10000;int main(){    int number = read_number();    int Divisor;    size_t Divisor_top = 0;    factorize(number, Divisor, &Divisor_top);    print_array(Divisor, Divisor_top);    return 0;}

Сама библиотека должна состоять из двух файлов: mylib.h и mylib.c.

mylib.h

#ifndef MY_LIBRARY_H_INCLUDED#define MY_LIBRARY_H_INCLUDED#include <stdlib.h>//считываем числоint read_number();//получаем простые делители числа// сохраняем их в массив, чей адрес нам переданvoid factorize(int number, int *Divisor, int *Divisor_top);//выводим числоvoid print_number(int number);//распечатывает массив размера A_size в одной строке через TABvoid print_array(int A[], size_t A_size);#endif // MY_LIBRARY_H_INCLUDED

mylib.c

#include <stdio.h>#include «my_library.h»//считываем числоint read_number(){    int number;    scanf(«%d», &number);    return number;}//получаем простые делители числа// сохраняем их в массив, чей адрес нам переданvoid factorize(int x, int *Divisor, int *Divisor_top){    for (int d = 2; d <= x; d++) {        while (x%d == 0) {            Divisor = d;            x /= d;        }    }}//выводим числоvoid print_number(int number){    printf(«%d\n», number);}//распечатывает массив размера A_size в одной строке через TABvoid print_array(int A[], size_t A_size){    for(int i = A_size-1; i >= 0; i—)    {        printf(«%d\t», A);    }    printf(«\n»);}

Препроцессор Си, встречая #include «mylib.h», полностью копирует содержимое указанного файла (как текст) в место вызова директивы. Благодаря этому на этапе компиляции не возникает ошибок типа Unknown identifier при использовании функций из библиотеки.

Файл mylib.c компилируется отдельно.

А на этапе компоновки полученный файл mylib.o должен быть включен в исполняемый файл program.exe.

Cреда разработки обычно скрывает весь этот процесс от программиста, но для корректного анализа ошибок сборки важно представлять себе как это делается

Обозначение понятия

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

  1. Аниме. В данной сфере компиляцией обозначают короткометражный или полнометражный фильм, который основан на соответствующем сериале, выполненном в классическом жанре японской анимации
  2. Литература. В этом виде искусства компиляцией называют создание сочинений на основании уже существующих произведений, без дополнительной обработки источников. Также в литературе данным термином обозначают любую работу, выполненную таким образом. Этот вид деятельности существенно отличается от плагиата ввиду того, что в некоторых типах произведений, таких как обзоры, очерки или монографии, авторам необходимо использовать большое количество источников, в том числе и отдельных вставок из них.
  3. Музыка. В данном виде искусства компиляцией называют сборник или же целый альбом, в который входят композиции, выполненные на одну и ту же тему. Это могут быть хит-парады, песни, определенного стиля или эпохи, а также сочинения некоего исполнителя различных лет написания. Отдельно в музыке этим термином именуется методика составления произведения из уже использующихся тем. Иногда компиляцией можно назвать то же, что и попурри.
  4. Программирование. Компиляцией в данной науке принято именовать осуществление трансляции программы, что написана на высокоуровневом языке, в программу, которая создана посредством языка более низкого уровня, но при этом имеющего схожий машинный код. Этот процесс осуществляется при помощи использования специального компилятора.

Вышеперечисленный перечень сфер применения понятия компиляция не является исчерпывающим.

Литература

Использование компиляции в литературе напрямую связано с сочинением работ, которые основаны на использовании большого количества источников. Таким способом создается информативный и действительно полезный материал, в котором можно найти большое количество данных по заданной теме.

Появление компиляции в литературе объясняется распространением учебно-популяризаторских и просветительских целей. В древние времена отсутствие такого механизма было объяснено сложностью понимания авторства и не имеющимся во всех государствах института авторского права.

Музыка

Основные типичные примеры компиляции в музыке заключаются в следующем:

  1. Сборники самых популярных композиций артиста или же группы. Для привлечения внимания к ним, чаще всего в них включают песню, ранее не выпускавшуюся в других альбомах.
  2. Другие сборники артиста или группы. Это могут быть редкие записи, песни, являющиеся саундтреками к фильмам, и т.д.
  3. Наборы дисков исполнителя. Они могут охватывать либо все творчество исполнителя, либо часть его альбомов.
  4. Тематические сборники нескольких исполнителей. Они могут быть посвящены любви, Новому году, Рождеству и т.д.
  5. Жанровые сборники. Чаще всего их создают исполнители, работающие в жанрах блюз, рок, джаз и др.
  6. Сборники хитов различных артистов. Чаще всего это касается самых популярных песен различных времен или же определенного года.
  7. Рекламные сборники. Эта форма продвижения является одной из наиболее успешных и популярных.
  8. Альбомы продюсеров. В большинстве случаев они помогают в работе большому количеству исполнителей.

Таким образом, компиляция в музыке обрела такое же распространение, как и в литературе.

Программирование

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

  • пакетная – использование нескольких модулей в одном и том же задании;
  • построчная – анализ и интерпретация каждой завершенной грамматической конструкции языка по очереди;
  • условная – транслируемый текст основывается на тех нормах, что заданы в первоначальной программе.

Трансляция программы – это неотъемлемая часть компиляции. Этот процесс включает в себя такие действия:

  • анализ лексики;
  • анализ синтаксиса;
  • анализ семантики;
  • оптимизация;
  • генерация нового кода.

Для осуществления компиляции в программировании используются различные типы программ. Они бывают векторизующими, гибкими, диалоговыми, инкрементальными, интерпретирующими, отладочными, резидентными, самокомпилирующими и универсальными.

Литература

Литературная компиляция более всего отвечает дословному переводу данного термина («кража»). Подобная деятельность заключается в сочинении и составлении неких научных или учебных текстов, основываясь на чужих источниках. При этом не производится их творческая обработка, новое осмысление. В редких случаях компиляцией может являться и литературное произведение, причём как полностью, так и частично.

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

Литературные компиляции обычно преследуют учебные или просветительские цели. Как отдельный вид литературного искусства сформировалась ещё в те годы, когда законодательно установленных положений об авторском праве ещё не существовало. В русской классике к компиляциям в ранние годы своего творчества часто прибегали такие авторы, как М. Лермонтов, К. Батюшков, И. Козлов.

Японская анимация. Полнометражный или короткометражный мультипликационный фильм, созданный по мотивам определённого сериала, в жанре «аниме».

5
1
голос

Рейтинг статьи

Природа интерпретатора

Интерпретаторы могут создаваться по-разному. Существуют интерпретаторы, которые читают исходную программу и не выполняют дополнительной обработки. Они просто берут определенное количество строк кода за раз и выполняют его.

Некоторые интерпретаторы выполняют собственную компиляцию, но обычно преобразуют программу байтовый код, который имеет смысл только для интерпретатора. Это своего рода псевдо машинный язык, который понимает только интерпретатор.

Такой код быстрее обрабатывается, и его проще написать для исполнителя (части интерпретатора, которая исполняет), который считывает байтовый код, а не код источника.

Есть интерпретаторы, для которых этот вид байтового кода имеет более важное значение. Например, язык программирования Java «запускается» на так называемой виртуальной машине

Она является исполняемым кодом или частью программы, которая считывает конкретный байтовый код и эмулирует работу процессора. Обрабатывая байтовый код так, как если бы процессор компьютера был виртуальным процессором.

У меня есть эмулятор для игровой приставки NIntendo. Когда я загружаю ROM-файл Dragon Warrior, он форматируется в машинный код, который понимает только процессор NES. Но если я создаю виртуальный процессор, который интерпретирует байтовый код во время работы на другом процессоре, я могу запустить Dragon Warrior на любой машине с эмулятором.

Это использует концепция компиляции Java, а также все интерпретаторы. На любом процессоре, для которого я могу создать интерпретатор / эмулятор, можно запускать мои интерпретируемые программы / байтовый код. В этом заключается основное преимущество интерпретатора над компилятором.

Рабочий цикл программы

При использовании любого языка программирования существует определенный рабочий цикл создания кода. Вы пишете его, запускаете, находите ошибки и отлаживаете. Таким образом, вы переписываете и дописываете программу, проверяете ее. То, о чем пойдет речь в этой статье, это «запускаемая» часть программы.

Когда пишете программу, вы хотите, чтобы ее инструкции работали на компьютере. Компьютер обрабатывает информацию с помощью процессора, который поэтапно выполняет инструкции, закодированные в двоичном формате. Как из выражения «a = 3;» получить закодированные инструкции, которые процессор может понять?

Мы делаем это с помощью компиляции. Существует специальные приложения, известные как компиляторы. Они принимают программу, которую вы написали. Затем анализируют и разбирают каждую часть программы и строят машинный код для процессора. Часто его также называют объектным кодом.

На одном из этапов процесса обработки задействуется компоновщик, принимающий части программы, которые отдельно были преобразованы в объектный код, и связывает их в один исполняемый файл. Вот схема, описывающая данный процесс:

Первые компиляторы были написаны непосредственно через машинный код или с использованием ассемблеров. Но цель компилятора очевидна: перевести программу в исполняемый машинный код для конкретного процессора.

Некоторые языки программирования разрабатывались с учетом компиляции. C, например, предназначался для того, чтобы дать возможность программистам с легкостью реализовать разные вещи. Но в итоге он разрабатывался таким образом, чтобы его можно было легко перевести на машинный код. Компиляция в программировании это серьезно!

Не все языки программирования учитывают это в своей концепции. Например, Java предназначался для запуска в «интерпретирующей» среде, а Python всегда должен интерпретироваться.

Если ваша программа запускается, но окно мигает и сразу закрывается

Некоторые IDE автоматически не приостанавливают экран консоли после завершения выполнения программы. Ваша программа запускается, но окно вывода закрывается, прежде чем вы сможете просмотреть результаты.

Если это так с вашей IDE, следующие два шага решат вашу проблему:

Сначала добавьте или убедитесь, что следующие строки находятся в верхней части вашей программы (пользователи Visual Studio должны убедиться, что эти строки появляются после или , если таковые существуют):

Во-вторых, добавьте следующий код в конец функции (непосредственно перед оператором ):

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

Другие решения, такие как обычно предлагаемое , могут работать только в определенных операционных системах, и их следует избегать.

Ваш антивирус также может блокировать выполнение программы. В таком случае попробуйте временно отключить его и посмотреть, решится ли проблема.

Для пользователей Visual Studio

Visual Studio не будет в конце делать паузу в работе консольного приложения, если оно запускается с отладкой (меню Отладка (Debug) → Начать отладку (Start Debugging)). Если вы хотите, чтобы она сделала паузу, вы можете либо использовать приведенное выше решение с дополнительным кодом, либо запустить свою программу без отладки (меню Отладка (Debug) → Начать отладку (Start Without Debugging)).

Компиляция программ Linux

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

Получение исходников

Первое что нам понадобиться, это исходные коды программы, которые можно взять на GitHub. Вы можете найти исходники для большинства программ Linux на GitHub. Кроме того, там же есть инструкции по сборке:

Давайте загрузим сами исходники нашей программы с помощью утилиты git:

Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:

Настройка configure

Дальше нам нужно запустить скрипт, который проверит нашу программу на совместимость с системой и настроит параметры компиляции. Он называется configure и поставляется разработчиками программы вместе с исходниками. Весь процесс компиляции описан в файле Makefile, его будет создавать эта утилита.

Если configure нет в папке с исходниками, вы можете попытаться выполнить такие скрипты чтобы его создать:

Также для создания этого скрипта можно воспользоваться утилитой automake:

Утилита automake и другие из ее набора генерируют необходимые файлы на основе файла Mackefile.am. Этот файл обязательно есть в большинстве проектов.

После того как вы получили configure мы можем переходить к настройке. Одним из огромных плюсов ручной сборки программ есть то, что вы можете сами выбрать с какими опциями собирать программу, где она будет размещена и какие дополнительные возможности стоит включить. Все это настраивается с помощью configure. Полный набор опций можно посмотреть, выполнив:

Рассмотрим наиболее часто используемые, стандартные для всех программ опции:

  • —prefix=PREFIX — папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;
  • —bindir=DIR — папка для размещения исполняемых файлов, должна находится в PREFIX;
  • —libdir=DIR — папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;
  • —includedir=DIR — папка для размещения man страниц;
  • —disable-возможность — отключить указанную возможность;
  • —enable-возможность — включить возможность;
  • —with-библиотека — подобно enable активирует указанную библиотеку или заголовочный файл;
  • —without-библиотека — подобное disable отключает использование библиотеки.

Вы можете выполнить configure без опций, чтобы использовать значения по умолчанию, но также можете вручную указать нужные пути. В нашем случае ./configure есть, и мы можем его использовать:

Во время настройки утилита будет проверять, есть ли все необходимые библиотеки в системе, и если нет, вам придется их установить или отключить эту функцию, если это возможно. Например, может возникнуть такая ошибка: no terminal library found checking for tgetent()… configure: error: NOT FOUND!

В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает ncurses, поэтому ставим:

Приставка lib всегда добавляется перед библиотеками, а -dev — означает, что нам нужна библиотека со всеми заголовочными файлами. После удовлетворения всех зависимостей настройка пройдет успешно.

Сборка программы

Когда настройка будет завершена и Makefile будет готов, вы сможете перейти непосредственно к сборке программы. На этом этапе выполняется непосредственно преобразование исходного кода в машинный. Утилита make на основе Makefile сделает все необходимые действия:

Дальше осталось установить саму программу, если вы использовали опцию prefix, чтобы не устанавливать программу в основную файловую систему, то можно применить стандартную опцию make:

После этого программа будет установлена в указанную вами папку, и вы сможете ее использовать. Но более правильный путь — создавать пакет для установки программы, это делается с помощью утилиты checkinstall, она позволяет создавать как deb, так и rpm пакеты, поэтому может использоваться не только в Ubuntu. Вместо make install выполните:

Затем просто установите получившийся пакет с помощью dpkg:

После этого сборка программы полностью завершена и установлена, так что вы можете переходить к полноценному использованию.

Если вы устанавливали программу с помощью make install, то удалить ее можно выполнив в той же папке обратную команду:

Команда удалит все файлы, которые были скопированы в файловую систему.

Проекты

Чтобы написать программу на C++ внутри IDE, мы обычно начинаем с создания нового проекта (мы покажем вам, как это сделать чуть позже). Проект – это контейнер, в котором хранятся все файлы исходного кода, изображения, файлы данных и т.д., которые необходимы для создания исполняемого файла (или библиотеки, веб-сайта и т.д.), который вы сможете запускать или использовать. Проект также сохраняет различные настройки IDE, компилятора и компоновщика, а также запоминает, где вы остановились, чтобы позже, при повторном открытии проекта состояние IDE можно было восстановить с того места, где вы остановились. Когда вы решите скомпилировать свою программу, все файлы .cpp в проекте будут скомпилированы и слинкованы.

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

Лучшая практика

Создавайте новый проект для каждой новой программы, которую вы пишете.

Создание проекта в Visual Studio 2017 или в более ранней версии

Чтобы создать новый проект в Visual Studio 2017 или более ранней версии, выберите меню Файл (File) → Создать (New) → Проект (Project). Появится диалоговое окно, которое выглядит примерно так:

Рисунок 6 – Диалоговое окно «Новый проект Visual Studio 2017»

Сначала убедитесь, что слева указан Visual C++. Если вы не видите Visual C++, возможно, вы забыли выбрать установку поддержку Desktop development with C++ при установке Visual Studio. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).

Если вы используете Visual Studio 2017 v15.3 или новее, под Visual C++ выберите Windows Desktop, а затем выберите Windows Desktop Wizard в главном окне.

Если вы не видите вариант с Windows Desktop, возможно, вы используете старую версию Visual Studio. Отлично. Вместо этого выберите Win32, а затем Win32 Console Application в главном окне.

Внизу в поле Name введите название своей программы (замените существующее имя на HelloWorld). В поле Location вы можете при желании выбрать другое место для размещения вашего проекта. Пока подойдет и значение по умолчанию.

Нажмите ОК. Если вы используете старую версию Visual Studio, запустится мастер приложений Win32. Нажмите Next.

На этом этапе вы должны увидеть диалоговое окно мастера, которое выглядит примерно так (более старые версии Visual Studio используют другой стиль, но имеют большинство из тех же параметров):

Рисунок 7 – Мастер создания десктопного приложения Visual Studio 2017

Убедитесь, что вы сняли флажок Предкомпилированный заголовок (Precompiled Header).

Затем нажмите ОК или Finish. Теперь ваш проект создан!

Создание файла исходного кода на языке C и его компиляция из командной строки

  1. В окне командной строки разработчика введите команду , чтобы изменить текущий рабочий каталог на корень диска C:. Затем введите , чтобы создать каталог, и введите , чтобы перейти к этому каталогу. В этом каталоге будут находиться исходный файл и скомпилированная программа.

  2. В командной строке разработчика введите команду . В появившемся диалоговом окне блокнота с оповещением выберите Да , чтобы создать файл simple.c в рабочем каталоге.

  3. В окне блокнота введите следующие строки кода:

  4. В строке меню блокнота выберите команду Файл > Сохранить , чтобы сохранить файл simple.c в рабочем каталоге.

  5. Вернитесь к окну командной строки разработчика. Введите в командной строке, чтобы получить список содержимого каталога c:\simple. Вы увидите исходный файл simple.c в списке каталогов, который выглядит примерно так:

    Даты и некоторые другие данные будут отличаться на вашем компьютере. Если вы не видите файл исходного кода simple.c, убедитесь в том, что вы открыли созданный каталог c:\simple и сохранили файл исходного кода в нем в Блокноте. Кроме того, убедитесь в том, что исходный код был сохранен с расширением имени файла .c, а не .txt.

  6. Чтобы скомпилировать программу, в командной строке разработчика введите .

    Имя исполняемой программы (simple.exe) отображается в информации, выводимой компилятором.

    Примечание

    Если вы получаете сообщение об ошибке, например «cl не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл», ошибке C1034 или LNK1104, командная строка разработчика настроена неправильно. Чтобы получить сведения о том, как устранить эту проблему, вернитесь к разделу Открыть командную строку разработчика.

    Примечание

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

  7. Чтобы запустить программу, в командной строке введите .

    Программа выводит следующий текст и затем закрывается:

    Поздравляем! Вы скомпилировали и запустили программу на C с помощью командной строки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector