Системы сборки на основе Make/Сборка простейших программ
Выполним, для примера, сборку простейших программ на языках C и Fortran, с использованием GNU Make и GCC.
C
править#include <stdio.h>
int
main ()
{
puts ("Hello, world!");
/* . */
return 0;
}
Соберем пример непосредственно командой
gcc
вызова компилятора языка C из состава GCC (предполагаем, что исходный код находится в файлеhello.c
):$ gcc -Wall -pedantic -o hello-nomk hello.c $ ./hello-nomk Hello, world! $
Отметим, что компоновщик вызывается автоматически, как часть выполнения команды
gcc
.Повторим сборку с использованием правил по-умолчанию GNU Make, явно указав нужный нам компилятор (
CC
) и параметры его вызова (CFLAGS
):$ make \ CC=gcc \ CFLAGS='-Wall -pedantic' \ hello gcc -Wall -pedantic hello.c -o hello $ ./hello Hello, world! $
Fortran
правитьWRITE (*, '(A)') 'Hello, world!'
END
Соберем пример непосредственно командой
gfortran
вызова компилятора Fortran из состава GCC (предполагаем, что исходный код находится в файлеhellof.f
):$ gfortran -Wall -pedantic -ffree-form -o hellof-nomk hellof.f $ ./hellof-nomk Hello, world! $
Повторим сборку с использованием правил по-умолчанию 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! $
Отметим, что компоновщик вызывается автоматически, как часть выполнения команды gfortran
.
Использование 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
Создадим файл
Makefile
в директории исходного кода и сборки, содержащий Make-код выше.Удалим результаты предыдущих вызовов Make:
$ rm -- hello hellof $
Повторим сборку:
$ make gcc -Wall -pedantic hello.c -o hello gfortran -Wall -pedantic -ffree-form hellof.f -o hellof $
Отметим, что для сборки программ теперь достаточно простой команды
$ make
.Кроме того, при использовании Make обновлены будут лишь те результирующие (исполнимые) файлы, для которых изменились соответствующие исходные.
Проверим эту особенность повторным запуском
make
:$ make make: Nothing to be done for `default'. $