Как собрать программу из исходников windows

Обновлено: 07.07.2024

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

Сейчас такая ситуация случается гораздо реже, благо установка и обновление программ в Debian больше напоминает заказ в ресторане: хочу это, хочу то -- подождите -- готово! Однако умение собирать программы из исходников рано или поздно пригождается практически любому пользователю свободного программного обеспечения. И сложного в этом ничего нет.

Достаточно один раз в жизни услышать волшебное заклинание: " configure , make , make install ". Дальше я объясню, что это значит.

Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),
потом смешать их в нужном порядке (подготовить исходники к сборке, ./configure ), а затем залить в форму и поставить в печь (запустить сборку, make ). Спустя некоторое время из печи можно вынимать готовый к употреблению пирог (устанавливать готовую программу, make install ).

Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита make . Это и есть "печь". Потребуется и место, где можно всем этим заняться -- командная строка (терминал) ("кухня"). Если у вас есть и кухня, и печь, то можете начинать готовить.

Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски исходный код называется source code.

Шаг 1: берём исходники

Необходимо скачать и распаковать архив с исходным кодом программы. Например, можно скачать программу hello-2.1.1. Обычно исходники следует брать с сайта разработчиков программы.

Распаковать архив можно так:

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

Перейдите в каталог с исходным кодом:

Шаг 2: configure (месим тесто)

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

В большинстве случае для подготовки исходников к сборке потребуется выполнить только одну команду:

Она проверит наличие всех необходимых условий (библиотек и других программ) в Вашей системе, и приготовит исходный код к их использованию. Обратите внимание на символы " ./ " в начале команды. Они указывают, что необходимо выполнить команду configure из текущего каталога, то есть команду configure поставляемую вместе с исходным текстом программы, которую мы собираем.

На этом же этапе можно указать и куда именно надо ставить программу. Хотя в большинстве случаев рекомендуется ставить "самосборные" программы в каталог /usr/local , иногда это невозможно. Так, если у пользователя нет прав администратора, например на общественном компьютере, то установить программу можно только в свой домашний каталог. Чтобы установить программу в домашний каталог нужно указать дополнительный параметр команде configure :

Дополнение: на самом деле, я обычно устанавливаю программы с префиксом /usr/local/stow/название-программы , а после установки использую утилиту stow , чтобы поставить символические ссылки на файлы программы в системных каталогах. Использование утилиты stow позволяет мне потом легко удалить установленную программу, не связываясь при этом с более трудоёмкой сборкой пакетов.

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

config.status: creating Makefile
config.status: creating contrib/Makefile
config.status: creating doc/Makefile
config.status: creating intl/Makefile
.

Шаг 3: make (в печь!)

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

Для больших программ этот процесс может занимать довольно много времени. Однако наша программа-пример hello должна собраться быстро.

то значит, что-то пошло не так, и сборка не получилась. Однако чаще всего сборка заканчивается без ошибок.

Шаг 4: make install (кушать подано!)

Собственно всё. Пирог можно подавать к столу, а собранную программу устанавливать в систему. Делается это так:

Если на шаге подготовки исходников Вы выбрали вариант установки в домашний каталог (как я), то не забудьте добавить подкаталог

/bin в переменную PATH :

Можете запускать собранную программу:

Она пишет на экран "Здравствуй, мир!". Всё ОК.

Надеюсь, что эти инструкции будут понятны даже совсем начинающим пользователям линукс. Мне в своё время не хватало таких инструкций :)

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

в каталоге с её исходным кодом, но не всегда этот каталог сохраняется в целостности, да и не все авторы программ должным образом готовят исходные тексты к make uninstall

Поэтому лучше пользоваться готовыми пакетами, поставляемые с Вашим дистрибутивом. Так, чтобы установить программу hello в Debian GNU/Linux достаточно всего одной команды:

Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),потом смешать их в нужном порядке (подготовить исходники к сборке, ./configure), а затем залить в форму и поставить в печь (запустить сборку, make). Спустя некоторое время из печи можно вынимать готовый к употреблению пирог (устанавливать готовую программу, make install).

Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита make. Это и есть "печь". Потребуется и место, где можно всем этим заняться -- командная строка (терминал) ("кухня"). Если у вас есть и кухня, и печь, то можете начинать готовить.

Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски исходный код называется source code.

Шаг 1: берём исходники

Необходимо скачать и распаковать архив с исходным кодом программы. Например, можно скачать программу hello-2.1.1. Обычно исходники следует брать с сайта разработчиков программы.

Распаковать архив можно так:
tar zxvf hello-2.1.1.tar.gz

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

Перейдите в каталог с исходным кодом:
cd hello-2.1.1

Шаг 2: configure (месим тесто)

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

В большинстве случае для подготовки исходников к сборке потребуется выполнить только одну команду:
hello-2.1.1$ ./configure

Она проверит наличие всех необходимых условий (библиотек и других программ) в Вашей системе, и приготовит исходный код к их использованию. Обратите внимание на символы "./" в начале команды. Они указывают, что необходимо выполнить команду configure из текущего каталога, то есть команду configure поставляемую вместе с исходным текстом программы, которую мы собираем.

Внимательно читайте что пишется на экране при подготовке исходников. Если всё нормально, то закончится она должна чем-нибудь вроде
config.status: creating Makefile
config.status: creating contrib/Makefile
config.status: creating doc/Makefile
config.status: creating intl/Makefile

Шаг 3: make (в печь!)

Если предыдущая стадия закончилась нормально, то теперь можно ставить наш полуфабрикат в печь. То есть запускать процесс сборки программы. Обычно он происходит автоматически и управляется командой make:
hello-2.1.1$ make

Для больших программ этот процесс может занимать довольно много времени. Однако наша программа-пример hello должна собраться быстро.

make: *** [all] Ошибка 2

то значит, что-то пошло не так, и сборка не получилась. Однако чаще всего сборка заканчивается без ошибок.

Шаг 4: make install (кушать подано!)

Собственно всё. Пирог можно подавать к столу, а собранную программу устанавливать в систему. Делается это так:

hello-2.1.1$ make install

Если на шаге подготовки исходников Вы выбрали вариант установки в домашний каталог (как я), то не забудьте добавить подкаталог

/bin в переменную PATH:

Можете запускать собранную программу:

Она пишет на экран "Здравствуй, мир!". Всё ОК.

Надеюсь, что эти инструкции будут понятны даже совсем начинающим пользователям линукс. Мне в своё время не хватало таких инструкций :)

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

hello-2.1.1$ make uninstall

в каталоге с её исходным кодом, но не всегда этот каталог сохраняется в целостности, да и не все авторы программ должным образом готовят исходные тексты к make uninstall

Поэтому лучше пользоваться готовыми пакетами, поставляемые с Вашим дистрибутивом. Так, чтобы установить программу hello в Debian GNU/Linux достаточно всего одной команды:

БлогNot. Как собрать проект C++ с github из исходников и подключить его к Visual Studio

Как собрать проект C++ с github из исходников и подключить его к Visual Studio

Благодаря менеджеру пакетов winget, уже входящему в актуальные сборки масдайки, теперь в Windows 10 можно инсталлировать приложения одной простой консольной командой (см. также доку от Микрософта).

Но мы рассмотрим сейчас ситуацию, когда у нас есть только ссылка на исходники проекта, скажем, на Гитхабе (возьмём для примера библиотеку для простых чисел primesieve) и нужно каким-то образом скомпилировать внешний проект в своей Studio, чтобы воспользоваться его возможностями в своём приложении.

В противном случае, конечно же, нестандартный include вроде этого, который вы нашли в коде-образце

работать не будет ни за что.

Первым делом скачаем все исходники внешнего проекта "как есть" в архиве .zip, для этого у нас на гитхабе есть кнопка "Download ZIP":

Как загрузить проект с github в архиве .zip


Как загрузить проект с github в архиве .zip

Развернём проект, не создавая новой папки, если у вашего архиватора нет такого же пункта меню, просто сотрите предлагаемое архиватором имя новой папки, потому что папка уже есть в архиве:

Извлечь внешний проект из архива, не создавая новой папки


Извлечь внешний проект из архива, не создавая новой папки

Если покопаться в файле readme.md проекта, как правило, можно найти инструкцию по установке (Build instructions) и даже "Detailed build instructions", где говорится, в числе прочего, и о компиляции проекта под Microsoft Visual C++:

Команды cmake для компиляции проекта со страницы документации


Команды cmake для компиляции проекта со страницы документации

Откроем свой "некомпилируемый" без нужной библиотеки проект в Studio (я использую актуальную сборку версии 2019) и обратимся к команде меню Вид - Терминал. Выберем инструмент "Командная строка разработчика" (по умолчанию в новых сборках теперь выбран PowerShell, впрочем, если в документации приведены команды PowerShell, то применяйте их).

У Микрософта инструмент описан вот здесь.

Командная строка разработчика в Studio


Командная строка разработчика в Studio

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

- теперь я в нужной папке, так как развернул свой архив в папку d:\temp

Далее как написано:

Можно просто копировать команды со страницы документации, в окне консоли вверху есть стандартная кнопочка "Вставить". А вот точка в записи команд имеет значение, это ссылка на текущую папку!

Ну и, конечно, для другой версии Studio будет другое указание компилятора, узнать своё можно командой

Нужный генератор будет помечен в списке "звёздочкой".

Теперь проект можно открывать в Studio и работать с ним, все нужные файлы есть в папке d:\temp\primesieve-master

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

  • Меню Проект - Свойства, слева выбираем Свойства конфигурации, C/C++, Общие, раскрываем поле "Дополнительные каталоги включаемых файлов", говорим "Изменить" и показываем на папку D:\Temp\primesieve-master\include . В вашем проекте, как правило, тоже будет вложенная папка include .
  • В том же окне выбираем Компоновщик - Общие - Дополнительные каталоги библиотек, "Изменить" и добавляем путь D:\Temp\primesieve-master\Release . Этого может оказаться мало, у вашего проекта и внешнего должны быть выбраны одинаковые конфигурации решения. Так как я выбрал Release для внешнего проекта, то и в своём проекте в списке "Конфигурации решения" (на стандартной панели инструментов) указал Release и платформу x64. Можно было работать и с Debug, но тогда и внешний проект компилируем как Debug и потом выбираем путь D:\Temp\primesieve-master\Debug .
  • В списке C/C++ - Создание кода - Библиотека времени выполнения выбрал Многопоточный DLL (/MD), иначе будет "LNK2038: обнаружено несоответствие для 'RuntimeLibrary': значение 'MT_StaticRelease' не соответствует значению 'MD_DynamicRelease' в file.obj".
  • Сам файл библиотеки, как правило имеющий тип .lib , тоже нужно прописать. Всё в том же окне свойства проекта выбираем список Компоновщик - Ввод, раскрываем список "Дополнительные зависимости", жмём "Изменить" и указываем в поле ввода имя файла библиотеки primesieve.lib
  • На всякий случай, проверяем, что у нас в списке Компоновщик - Система - Подсистема, у меня там просто Консоль (/SUBSYSTEM:CONSOLE) , для других типов проектов может понадобиться изменение и этой настройки.

После этого у меня всё заработало.

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

Ответы вышли такие:

За счёт хорошо оптимизированного кода библиотеки считается всё мгновенно.



Profit

1. Простой способ, но он редко работает.

Процедура установки программного обеспечения, из пакетов tar.gz или tar.bz2 обычно (но не всегда) происходит так:

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

2. Если не вышел первый способ

Шаг1. Распаковка.

Может быть, Вы уже заметили, что пакеты, содержащие исходные коды программ имеют расширения tar.gz и tar.bz2. Это означает, что пакет представляет собой сжатый tar архив. При оформлении пакета файлы исходного кода другие необходимые файлы были сложены вместе в единый tar-архив, естественно, с расширением tar. После укладки их всех вместе в архив, он был сжат компрессором gzip, и получил, как следствие, расширение gz.
Некоторые люди используют вместо компрессора gzip компрессор bzip2, и в этих случаях файл с программой будет иметь расширение tar.bz2. Эти пакеты распаковываются точно так-же, как tar.gz, только нужно немного изменить командную строку при распаковке. Не имеет значения, куда Вы сохраняете архивы, загруженные из интернета, но я предлагаю создать для них специальный каталог, к примеру dls. Учтите, что каталог dls всего лишь пример. Вы можете разместить загруженные пакеты программ в той папке, в которой захотите. К примеру, предположим, что Ваше имя пользователя me, а пакет, который Вы сохранили в папке dls, созданной в домашнем каталоге (/home/me/dls), называется pkg.tar.gz.
И, наконец, перейдем к распаковке архива. После загрузки пакета распакуйте его следующей командой:


Как Вы видите, для распаковки архива можно использовать команду tar с соответствующими опциями (xvzf). Если Ваш пакет с расширением tar.bz2, то необходимо в параметрах указать, что это более сжатый tar-архив. Это делается с помощью опции z, например так:


Кратко об опциях:
-x = извлечь
-v = подробный режим. Показывает какие файлы распаковываются.
-z = указать, что используется gzip.
-j = указать, что используется bzip2.
-f = указать, с каким файлом работать. Требует после себя аргумента.

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


В нашем примере получили то, что ожидалось, и архиватор создал из пакета pkg.tar.gz каталог с его именем. Теперь необходимо перейти внутрь этого каталога командой cd:


В данном каталоге может содержаться различная документация, например файлы README или INSTALL. Крайне рекомендую ознакомиться с их содержанием перед продолжением.

Шаг 2. Настройка.

Теперь, после того как мы изменили месторасположение исходников программы (и провели небольшое изучение документации), пришло время конфигурирования пакета. Обычно, но не всегда (именно поэтому необходимо читать файлы REAMDE и INSTALL), это делается запуском конфигурационного скрипта.
Вы можете запустить этот скрипт командой:

Шаг 3. Компилирование.

Итак, сейчас мы будем создавать из исходных текстов саму програму. Это делается путем запуска команды:

Шаг 4. Установка.

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

4. Удаление ненужных файлов.


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

5. Удаление программы.

Итак, Вы решили что Вам не нравится программа. Удаление собранных Вами программ так-же легко, как удаление программ, установленных менеджером пакетов, как, к примеру, rpm. Если Вы хотите удалить программное обеспечение, Вами-же собранное, необходимо снова почитать документацию, которая шла с пакетом. Там можно увидеть, упоминается ли там процедура удаления. Если там этого не описано, можете хвататься и рвать свои волосы.
Если Вы не удалили Makefile, Вы сможете удалить программу, выполнив команду:

Читайте также: