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

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

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

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

Подготовка системы

Сборка программ из исходников в Linux

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

5 причин научиться собирать софт из исходников

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

Debian/Ubuntu

sudo apt install build-essential automake autoconf

Arch/Manjaro

sudo pacman -S base-devel —needed

Сборка программ c Github

И начнем мы с GParted, сборку или как еще называется данный процесс – компиляцию мы будем выполнять в Ubuntu 20.04. Вы можете спросить почему именно в Ubuntu, отвечу, для Arch Linux и подобных есть AUR. Да и со сборкой программ в Arch мы разберемся чуть позже.

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

Затем переходим в папку:

cd gparted

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

программ в Linux 3

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

Изучение GitHub в одном видео уроке за 15 минут!


./autogen.sh

программ в Linux 1

Если проблема с зависимостями у вас останется, то вы увидите об этом вывод:

программ в Linux 2

После того, как вы установите все необходимые зависимости, запускаете снова “autogen.sh”. В итоге он вам скажет что можно приступать к дальнейшим действиям:

./autogen.sh

программ в Linux 4

Далее запускаем “make” и затем когда “make” выполнит свою работу, запускаем “sudo make install”. Обратите внимания, в некоторых инструкциях не упоминается о том, что нужно установку программы выполнять именно от “sudo”, а именно: “sudo make install”. Из за этого у вас могут возникнуть проблемы. И так продолжаем сборку программы вводим команды:

make sudo make install

программ в Linux 5

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

Читайте также:
Что делает программа adguard

После установки можно найти программу в меню установленных программ.

Сборка программ из архива

Распаковывать архив можно из терминала, а можно при помощи графического интерфейса, например программой Ark или Менеджер архивов. Тут все зависит от того, как вам удобней. Для того что бы распаковать архив в терминале, нужно выполнить определенную команду. На примере с GParted такой командой будет:

tar xzf gparted-1.1.0.tar.gz

Примечание, tar является утилитой командной строки для распаковки архивов. И так, затем переходим в папку с распакованной программой и смотрим какие там имеются файлы. Тут как раз имеются README:

программ в Linux 8

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

программ в Linux 3

Для того что бы собрать данную программу, достаточно выполнить команды, которые прописаны в инструкции. Так как мы уже распаковали данный архив, пропускаем это шаг. Если вы не знаете как перейти в терминале в директорию программы, поясню. А если знаете, то пропустите данный шаг. Для того что бы перейти в терминале в нужную директорию, используется команда “cd“. Например, у вас папка с программой находится по адресу “Загрузки – папка с программой”, выполняем команду:

cd Загрузки

После чего можно посмотреть что у нас имеется в данной директории введя команду “ls“, после чего снова вводим команду “cd” и переходим в нужную нам директорию. Например:

cd gparted-1.1.0

Теперь приступаем к сборке программы GParted. Для этого вводим команды которые написаны в файле README.

./configure make make install

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

программ в Linux 9

После того как все необходимые зависимости были установлены, снова запускаем “./configure” и продолжаем компиляцию программы как описано выше. А именно, после запуска “./configure” запускаем “make”, а затем “sudo make install”.

Ошибки при сборке программы

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

программ в Linux 9 1

После того как вы установите необходимые зависимости, снова необходимо запустить ./configure. А может быть и так, что у вас не будет файла ./configure, попробуйте запустить другие скрипты:

./bootstrap ./autogen.sh

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

aclocal autoheader automake —gnu —add-missing —copy —foreign autoconf -f -Wall

В случае с дистрибутивами Arch/Manjaro необходимые пакеты вы можете подгрузить используя “Менеджер программ”, Предварительно не забыв подключить репозиторий AUR:

программ в Linux 11

Пример необходимых зависимостей при установки в Manjaro программы Blender. Компиляция производилась с использованием файла PKGBUILD:

программ в Linux 12

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

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

программ в Linux 7

Сборка в Arch/Manjaro (Arch Build System – ABS)

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

А так же существует способ собрать программу из исходников и вот тут вы можете столкнуться с тем, что вам попадется файл “PKGBUILD”. PKGBUILD это грубо говоря скрипт, который содержит инструкцию по скачиванию необходимых пакетов. Так же вместе с PKGBUILD могут быть и другие файлы, например “blender.desktop”. Вы можете открыть PKGBUILD и изменить необходимые параметры, но, это только при условии что вы знаете что делаете. Предположительно, вы уже перешли в каталог с исходниками программы, если же нет, сделать это можно командой в терминале “cd и путь к директории”. Для сборки пакета выполняем команду:

Читайте также:
Программа по русскому языку как иностранному второй сертификационный уровень

makepkg -si

Опишу опции которые тут применяются, опция -s произвести проверку и установку зависимостей, а опция i установку самого пакета:

программ в Linux 10

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

Заключение

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

А на этом сегодня все. Надеюсь данная статья будет вам полезна.
С уважением Cyber-X

Источник: cyber-x.ru

Использование GitHub Actions с C++ и CMake

Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Using GitHub Actions with C++ and CMake» о сборке проекта на C++ с использованием GitHub Actions и CMake автора Кристиана Адама.

Использование GitHub Actions с C++ и CMake

В этом посте я хочу показать файл конфигурации GitHub Actions для проекта C++, использующего CMake.

GitHub Actions это предоставляемая GitHub инфраструктура CI/CD. Сейчас GitHub Actions предлагает следующие виртуальные машины (runners):

Виртуальное окружение Имя рабочего процесса YAML
Windows Server 2019 windows-latest
Ubuntu 18.04 ubuntu-latest or ubuntu-18.04
Ubuntu 16.04 ubuntu-16.04
macOS Catalina 10.15 macos-latest

Каждая виртуальная машина имеет одинаковые доступные аппаратные ресурсы:

  • 2х ядерное CPU
  • 7 Гб оперативной памяти
  • 14 Гб на диске SSD

Каждое задание рабочего процесса может выполняться до 6 часов.

К сожалению, когда я включил GitHub Actions в проекте C++, мне предложили такой рабочий процесс:

./configure make make check make distcheck

Это немного не то, что можно использовать с CMake.

Hello World

Я хочу собрать традиционное тестовое приложение C++:

#include int main()

Со следующим проектом CMake:

cmake_minimum_required(VERSION 3.16) project(main) add_executable(main main.cpp) install(TARGETS main) enable_testing() add_test(NAME main COMMAND main)

TL;DR смотрите проект на GitHub.

Матрица сборки

Я начал со следующей матрицы сборки:

name: CMake Build Matrix on: [push] jobs: build: name: $ < < matrix.config.name >> runs-on: $ < < matrix.config.os >> strategy: fail-fast: false matrix: config: — < name: «Windows Latest MSVC», artifact: «Windows-MSVC.tar.xz», os: windows-latest, build_type: «Release», cc: «cl», cxx: «cl», environment_script: «C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat» >- < name: «Windows Latest MinGW», artifact: «Windows-MinGW.tar.xz», os: windows-latest, build_type: «Release», cc: «gcc», cxx: «g++» >- < name: «Ubuntu Latest GCC», artifact: «Linux.tar.xz», os: ubuntu-latest, build_type: «Release», cc: «gcc», cxx: «g++» >-

Свежие CMake и Ninja

На странице установленного ПО виртуальных машин мы видим, что CMake есть везде, но в разных версиях:

Виртуальное окружение Версия CMake
Windows Server 2019 3.16.0
Ubuntu 18.04 3.12.4
macOS Catalina 10.15 3.15.5

Это значит, что нужно будет ограничить минимальную версию CMake до 3.12 или обновить CMake.

CMake 3.16 поддерживает прекомпиляцию заголовков и Unity Builds, которые помогают сократить время сборки.

Поскольку у CMake и Ninja есть репозитории на GitHub, я решил скачать нужные релизы с GitHub.

Для написания скрипта я использовал CMake, потому что виртуальные машины по умолчанию используют свойственный им язык скриптов (bash для Linux и powershell для Windows). CMake умеет выполнять процессы, загружать файлы, извлекать архивы и делать еще много полезных вещей.

— name: Download Ninja and CMake id: cmake_and_ninja shell: cmake -P run: | set(ninja_version «1.9.0») set(cmake_version «3.16.2») message(STATUS «Using host CMake version: $») if («$ < < runner.os >>» STREQUAL «Windows») set(ninja_suffix «win.zip») set(cmake_suffix «win64-x64.zip») set(cmake_dir «cmake-$-win64-x64/bin») elseif («$ < < runner.os >>» STREQUAL «Linux») set(ninja_suffix «linux.zip») set(cmake_suffix «Linux-x86_64.tar.gz») set(cmake_dir «cmake-$-Linux-x86_64/bin») elseif («$ < < runner.os >>» STREQUAL «macOS») set(ninja_suffix «mac.zip») set(cmake_suffix «Darwin-x86_64.tar.gz») set(cmake_dir «cmake-$-Darwin-x86_64/CMake.app/Contents/bin») endif() set(ninja_url «https://github.com/ninja-build/ninja/releases/download/v$/ninja-$») file(DOWNLOAD «$» ./ninja.zip SHOW_PROGRESS) execute_process(COMMAND $ -E tar xvf ./ninja.zip) set(cmake_url «https://github.com/Kitware/CMake/releases/download/v$/cmake-$-$») file(DOWNLOAD «$» ./cmake.zip SHOW_PROGRESS) execute_process(COMMAND $ -E tar xvf ./cmake.zip) # Save the path for other steps file(TO_CMAKE_PATH «$ENV/$» cmake_dir) message(«::set-output name=cmake_dir::$») if (NOT «$ < < runner.os >>» STREQUAL «Windows») execute_process( COMMAND chmod +x ninja COMMAND chmod +x $/cmake ) endif()

Читайте также:
Как накрутить подписчиков через программу

Шаг настройки

Теперь, когда у меня есть CMake и Ninja, все, что мне нужно сделать, это настроить проект таким образом:

— name: Configure shell: cmake -P run: | set(ENV $ < < matrix.config.cc >>) set(ENV $ < < matrix.config.cxx >>) if («$ < < runner.os >>» STREQUAL «Windows» AND NOT «x$ < < matrix.config.environment_script >>» STREQUAL «x») execute_process( COMMAND «$ < < matrix.config.environment_script >>» set OUTPUT_FILE environment_script_output.txt ) file(STRINGS environment_script_output.txt output_lines) foreach(line IN LISTS output_lines) if (line MATCHES «^([a-zA-Z0-9_-]+)=(.*)$») set(ENV > «$») endif() endforeach() endif() file(TO_CMAKE_PATH «$ENV/ninja» ninja_program) execute_process( COMMAND $ < < steps.cmake_and_ninja.outputs.cmake_dir >>/cmake -S . -B build -D CMAKE_BUILD_TYPE=$ < < matrix.config.build_type >> -G Ninja -D CMAKE_MAKE_PROGRAM=$ RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR «Bad exit status») endif()

Я установил переменные окружения CC и CXX , а для MSVC мне пришлось выполнить скрипт vcvars64.bat , получить все переменные окружения и установить их для выполняющегося скрипта CMake.

Шаг сборки

Шаг сборки включает в себя запуск CMake с параметром —build :

— name: Build shell: cmake -P run: | set(ENV «[%f/%t %o/sec] «) if («$ < < runner.os >>» STREQUAL «Windows» AND NOT «x$ < < matrix.config.environment_script >>» STREQUAL «x») file(STRINGS environment_script_output.txt output_lines) foreach(line IN LISTS output_lines) if (line MATCHES «^([a-zA-Z0-9_-]+)=(.*)$») set(ENV > «$») endif() endforeach() endif() execute_process( COMMAND $ < < steps.cmake_and_ninja.outputs.cmake_dir >>/cmake —build build RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR «Bad exit status») endif()

Что бы увидеть скорость компиляции на разном виртуальном окружении, я установил переменную NINJA_STATUS .

Для переменных MSVC я использовал скрипт environment_script_output.txt , полученный на шаге настройки.

Шаг запуска тестов

На этом шаге вызывается ctest с передачей числа ядер процессора через аргумент -j :

— name: Run tests shell: cmake -P run: | include(ProcessorCount) ProcessorCount(N) execute_process( COMMAND $ < < steps.cmake_and_ninja.outputs.cmake_dir >>/ctest -j $ WORKING_DIRECTORY build RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR «Running tests failed!») endif()

Шаги установки, упаковки и загрузки

Эти шаги включают запуск CMake с —install , последующий вызов CMake для создания архива tar.xz и загрузку архива как артефакта сборки.

Я не стал использовать CMake в качестве языка сценариев для простых вызовов CMake с параметрами, оболочки по умолчанию прекрасно с этим справляются.

Обработка релизов

Когда вы помечаете релиз в git, вы также хотите, чтобы артефакты сборки прикрепились к релизу:

git tag -a v1.0.0 -m «Release v1.0.0» git push origin v1.0.0

Ниже приведён код для этого, который сработает, если git refpath содержит tags/v :

Это выглядит сложным, но это необходимо, так как actions/create-release можно вызвать однократно, иначе это действие закончится ошибкой. Это обсуждается в issue #14 и issue #27.

Несмотря на то, что вы можете использовать рабочий процесс до 6 часов, токен secrets.GITHUB_TOKEN действителен один час. Вы можете создать личный токен или загрузить артефакты в релиз вручную. Подробности в обсуждении сообщества GitHub.

Заключение

Включить GitHub Actions в вашем проекте на CMake становится проще, если создать файл .github/workflows/build_cmake.yml с содержимым из build_cmake.yml.

Вы можете посмотреть GitHub Actions в моем проекте Hello World GitHub.

Оригинальный текст опубликован под лицензией CC BY 4.0.

Источник: temofeev.ru

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