Системы сборки на основе Make/Сборка простейших программ

Выполним, для примера, сборку простейших программ на языках C и Fortran, с использованием GNU Make и GCC.


#include <stdio.h>

int
main ()
{
  puts ("Hello, world!");
  /* . */
  return 0;
}
  1. Соберем пример непосредственно командой gcc вызова компилятора языка C из состава GCC (предполагаем, что исходный код находится в файле hello.c):

    $ gcc -Wall -pedantic -o hello-nomk hello.c 
    $ ./hello-nomk 
    Hello, world!
    $ 
    

    Отметим, что компоновщик вызывается автоматически, как часть выполнения команды gcc.

  2. Повторим сборку с использованием правил по-умолчанию GNU Make, явно указав нужный нам компилятор (CC) и параметры его вызова (CFLAGS):

    $ make \
          CC=gcc \
          CFLAGS='-Wall -pedantic' \
          hello 
    gcc -Wall -pedantic    hello.c   -o hello
    $ ./hello 
    Hello, world!
    $ 
    
WRITE (*, '(A)') 'Hello, world!'
END
  1. Соберем пример непосредственно командой gfortran вызова компилятора Fortran из состава GCC (предполагаем, что исходный код находится в файле hellof.f):

    $ gfortran -Wall -pedantic -ffree-form -o hellof-nomk hellof.f 
    $ ./hellof-nomk 
    Hello, world!
    $ 
    
  2. Отметим, что компоновщик вызывается автоматически, как часть выполнения команды gfortran.

  3. Повторим сборку с использованием правил по-умолчанию GNU Make, явно указав нужный нам компилятор (FC) и параметры его вызова (FFLAGS):

    $ make \
          FC=gfortran \
          FFLAGS='-Wall -pedantic -ffree-form' \
          hellof 
    gfortran -Wall -pedantic -ffree-form   hellof.f   -o hellof 
    $ ./hellof 
    Hello, world!
    $ 
    

Использование Makefile

править

Ясно, что при частом повторении сборки (при работе над программой, или при необходимости выполнять сборку с разными параметрами), удобнее указать используемые компиляторы (CC, FC) и их опции (CFLAGS, FFLAGS) в отдельном файле.

### Makefile  -*- Makefile -*-

CC      = gcc
CFLAGS  = -Wall -pedantic

FC      = gfortran
FFLAGS  = -Wall -pedantic -ffree-form 

.PHONY: default
default: hello hellof

### Makefile ends here
  1. Создадим файл Makefile в директории исходного кода и сборки, содержащий Make-код выше.

  2. Удалим результаты предыдущих вызовов Make:

    $ rm -- hello hellof 
    $ 
    
  3. Повторим сборку:

    $ make 
    gcc -Wall -pedantic    hello.c   -o hello
    gfortran -Wall -pedantic -ffree-form    hellof.f   -o hellof
    $ 
    

    Отметим, что для сборки программ теперь достаточно простой команды $ make.

  4. Кроме того, при использовании Make обновлены будут лишь те результирующие (исполнимые) файлы, для которых изменились соответствующие исходные.

    Проверим эту особенность повторным запуском make:

    $ make 
    make: Nothing to be done for `default'.
    $