Системы сборки на основе 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'. $