Как скомпилировать программу для Linux из исходного кода?

«Как скомпилировать программу для Linux из исходного кода?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Подготовка окружения: Устанавливаю инструменты для сборки и зависимости.

# Для Ubuntu/Debian
sudo apt update
sudo apt install build-essential cmake git
# Часто нужны библиотеки dev
sudo apt install libssl-dev zlib1g-dev

# Для RHEL/CentOS/Fedora
sudo yum groupinstall "Development Tools"
sudo yum install cmake openssl-devel zlib-devel

2. Получение исходного кода:

git clone https://github.com/example/project.git
cd project
# Или для архивов
tar -xzf project.tar.gz
cd project

3. Конфигурация: Многие проекты используют autotools (скрипт configure).

./configure --prefix=/usr/local  # Указываю путь для установки

Если проект использует CMake, действую иначе:

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

4. Сборка:

make -j$(nproc)  # Использую все доступные ядра для ускорения

5. Установка (опционально):

sudo make install

Практический пример с nginx:

git clone https://github.com/nginx/nginx.git
cd nginx
./auto/configure --with-http_ssl_module --with-stream
make -j4
sudo make install

Важные моменты:

  • Всегда проверяю файлы README.md, INSTALL или CONTRIBUTING.md для специфичных инструкций.
  • Для сборки пакетов .deb или .rpm использую checkinstall вместо make install, чтобы потом можно было легко удалить программу через пакетный менеджер.
  • Если сборка завершается ошибкой из-за отсутствующей библиотеки, ищу пакет с суффиксом -dev или -devel в репозитории дистрибутива.