Основы программирования в Linux - Мэтью Нейл
Если вы — обычный пользователь, то у вас может не быть прав на установку новых команд в каталог /usr/local/bin. Можно изменить в make-файле каталог установки, изменить права доступа к этому каталогу или заменить пользователя (с помощью команды
sumake install$ <b>rm *.о myapp</b>$ <b>make -f Makefile3</b>gcc -I. -g -Wall -ansi -c main.cgcc -I. -g -Wall -ansi -c 2.cgcc -I. -g -Wall -ansi -с 3.cgcc -o myapp main.о 2.o 3.o$ <b>make -f Makefile3</b>make: Nothing to be done for 'all'.$ <b>rm myapp</b>$ <b>make -f Makefile3 install</b>gcc -o myapp main.o 2.o 3.oInstalled in /usr/local/bin$ <b>make -f Makefile3 clean</b>rm main.о 2.о 3.о$Как это работает
Сначала вы удаляете файл myapp и все объектные файлы. Команда
makeallmakemakemake installmake cleanВстроенные правила
До сих пор вы описывали в make-файле подробно, как выполнять каждый шаг. В действительности у команды
make#include <stdlib.h>#include <stdio.h>int main() { printf("Hello Worldn"); exit(EXIT_SUCCESS);}He задавая make-файла, попробуйте откомпилировать ее с помощью команды
make$ <b>make foo</b>сс foo.с -о foo$Как видите,
makeссgccccgcc$ <b>rm foo</b>$ <b>make CC=gcc CFLAGS="-Wall -g" foo</b>gcc -Wall -g foo.с -o foo$С помощью опции
-pmakemake -pOUTPUT_OPTION = -o [email protected]COMPILE.с = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -с%.о: %.с# commands to execute (built-in) : $(COMPILE.с) $(OUTPUT_OPTION) $<Теперь, принимая во внимание описанные встроенные правила, вы можете упростить ваш make-файл, удалив правила для создания объектных файлов и оставив только зависимости, таким образом, соответствующая секция make-файла читается просто:
main.о: main.c a.h2.о: 2.с a.h b.h3.o: 3.c b.h c.hЭту версию можно найти в загружаемом из Интернета программном коде, в файле Makefile4.
Суффиксы и шаблоны правил
Встроенные правила, которые вы видели, действуют, используя суффиксы (подобные расширениям файлов в системах Windows и MS-DOS), поэтому команда
makeПорой возникает потребность в создании новых правил. Авторы приучили себя работать с исходными файлами, которые необходимо компилировать несколькими разными компиляторами: двумя в среде MS-DOS и
gccmakeСледовательно, нужно было либо задавать правило для каждого отдельного исходного файла, либо научить
makeДля вставки правила с новым суффиксом сначала добавьте строку в make-файл, информирующую команду
makemake.<old_suffix>.<new_suffix>:для определения общего правила создания файлов с новым суффиксом из файлов с тем же основным именем, но старым суффиксом.
Далее приведен фрагмент make-файла с новым общим правилом для компиляции файлов с суффиксом .срр в файлы с суффиксом .о:
.SUFFIXES: .cpp