LINUX.ORG.RU

[SOLVED]GNU make templates

 , ,


0

2

Например,

# Makefile
%.out: %.o
	g++ $^ -o $@
%.o: %.cpp
	g++ -c $< -o $@

main.o: main.cpp
a.out: main.o

make не находит шаблона для a.out.

Вопрос: каким образом происходит поиск шаблона в Makefile?

Ответ: происходит так, что под выражение %.out: %.o подходит main.out: main.o, но не a.out: main.o



Последнее исправление: n0name_anonymous (всего исправлений: 1)

Ответ на: комментарий от n0name_anonymous

Как вызываешь make? Если что, если не указана цель, то по умолчанию выбирается первая в makefile - у тебя main.o

anonymous
()
Ответ на: комментарий от anonymous

Как вызываешь make? Если что, если не указана цель, то по умолчанию выбирается первая в makefile - у тебя main.o

Facepalm.

- a.out: main.o
+ main.out: main.o

Работает. Почему?

n0name_anonymous
() автор топика
Ответ на: комментарий от n0name_anonymous

%.out: %.o

Процент % в шаблоне - это одинаковая строка и слева и справа.

А в правиле a.out: main.o у тебя разные - «a» и «main». Поэтому для этого правила не сработает шаблон %.out: %.o.

anonymous
()
Ответ на: комментарий от n0name_anonymous

Почему a.out не собирается из main.o?

Потому что ты не указал, как это делать.

Ты описал правило: %.out: %.o, где % должен обозначать одну и ту же последовательность символов.

Теперь посмотри на строку a.out: main.o. Слева от двоеточия a не то же самое, что main справа. По той причине для этой зависимости правило не подходит.

wandrien ★★
()
Ответ на: комментарий от wandrien

Потому что ты не указал, как это делать.

Эврика! Спасибо.

n0name_anonymous
() автор топика

GNU make

Чтобы увидеть отладочные сообщения make, нужно запустить: make -d

Но так как make содержит десятки встроенных правил для совместимости с древними системами, разобраться в этой каше сложно.

Поэтому чтобы отключить встроенные правила: make -r -d

wandrien ★★
()
Ответ на: комментарий от level1

Ничего сложнее my_prog: my_prog.c ты таким образом не соберёшь. И то не факт, что соберётся так, как тебе надо.

Что за бред?

wandrien ★★
()
Ответ на: комментарий от level1

Раз пошла такая пьянка.

И зачем такой, и вообще мейлфайл писать? make my_prog сделает то же самое даже без мейкфайла.

anonymous
()
Ответ на: комментарий от anonymous

Да, не нужно. Я предположил, что наверное это «минимальный проблемный код», и у него там еще какие-то действия есть. Типа флагов, дебага, rm. Общий смысл в том, что вместо того, чтобы отключать функционал, лучше бы посоветовали ему выучить: $ make -p

level1 ★★
()
Ответ на: комментарий от level1

вместо того, чтобы отключать функционал

Балластный функционал, которым никто не пользуется.

А ничего сложнее в данной теме и нет.

В данной теме топикстартер учится писать makefile-ы. Уж сотня скрытых правил из 80-х ему точно ни к чему.

wandrien ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.