Эксперт С++
8711 / 4293 / 956
Регистрация: 15.11.2014
Сообщений: 9,733
1

Make, makefile, simple makefile, hello_world

15.03.2015, 21:12. Показов 1438. Ответов 3
Метки нет (Все метки)

Всем привет!

Разбираюсь с мэйк-файлами.

Проблема следующая: не понятен сам принцип обработки целей.

Сейчас я понимаю это так:
допустим, есть некая цель target1, которая зависит от файла target2, который зависит от файла target3.

1. Сначала система смотрит от чего зависит цель target1, видет, что цель зависит от файла target2
2. Система смотрит от чего зависит target2, и видет что он зависит от файла target3
3. Система смотрит: если target3 моложе, чем target2, значит target2 нужно обновить.
И тогда она выполняет набор правил для цели target2, после чего target2 становится обновленным

4. Далее система смотрит: target2 обновился, значит нужно обновить и target1,
поскольку target1 зависит от target2. И соотвественно обновляет target1.

-------------------


Делаю содержимое простейшего мэйкфайла:

Код
all: application
	@echo process all

application: 
	@echo process application
При запуске вижу pocess all, но не вижу process application.

Я думал, что поскольку цель all зависит от цели application,
то сначала будет обработана цель application, и только потом all.

Но этого не произошло. Почему?

Я предположил, что система решила, что application не был обновлен,
а значит и нет необходимости её запускать.

Тогда я переписал исходный код так:

Код
all: application
	@echo pocessed all
	
application: lastbuild
	@echo pocessing application...
Где lastbuild - это файл.

И получил нужный мне вывод:
pocessed application
pocessed all


Теперь все работает правильно.
Но мне как то не очевидно, что вообще происходит?

Получается, что если цель не является файлом, но она зависит от файла,
то цель априори обновляется?

Получается, что единственный способ определить,
что цель не являющаяся файлом должна быть обновлена - это сделать для неё зависимость от файла (или файлов) ?

А что делать, если цель не имеет зависимости от файлов, и нужно что бы она просто запускалась при каждой сборке?

Добавлено через 4 минуты
если сделаю вот так:

Код
all: view application
	@echo pocessed all
	
view:	
	@echo pocessed view

application: 
	@echo pocessed application

view отрабатывает.
application не отрабатывает.

не пойму логику.

Добавлено через 2 минуты
если сделаю так:

Код
all: view1 view2 application
	@echo pocessed all
	
view1: 
	@echo pocessed view1
	
view2: 
	@echo pocessed view2
	

application: 
	@echo pocessed application
отрабатывает все, кроме последней цели application

гм.. что за фигня?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2015, 21:12
Ответы с готовыми решениями:

Make и makefile
Здравствуйте. Меня интересует вопрос: что такое make, makefile, зачем это нужно? Часто, при...

Зацикливается make (makefile)
Решил освоить makefile Создаю простейшую программу, состоящую из единственного файла main.cpp...

makefile
Здравствуйте. Скачал библиотеку, там исходники и makefile. Как ее подключить? Заранее спасибо. ...

Makefile
У меня есть мальенкий проэк, пока что компилирую его с помощю IDE (не хочется писать руками длинный...

3
920 / 637 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
15.03.2015, 21:51 2
Цитата Сообщение от hoggy Посмотреть сообщение
отрабатывает все, кроме последней цели application
Похоже на баг. Если, конечно, в текущем каталоге нет файла application и с синтаксисом всё в порядке.
0
Эксперт С++
8711 / 4293 / 956
Регистрация: 15.11.2014
Сообщений: 9,733
15.03.2015, 22:15  [ТС] 3
Цитата Сообщение от gng Посмотреть сообщение
Похоже на баг. Если, конечно, в текущем каталоге нет файла application и с синтаксисом всё в порядке.
в текущем каталоге есть подкаталог по имени application

Добавлено через 3 минуты
видимо утилита make среагировала на каталог
убрал каталог в другое место, и все заработало
0
920 / 637 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
16.03.2015, 09:20 4
Цитата Сообщение от hoggy Посмотреть сообщение
убрал каталог в другое место, и все заработало
Как альтернатива, можно мэйку сказать, что цель не файловая
.PHONY: application
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2015, 09:20
Помогаю со студенческими работами здесь

Простой Makefile
Есть такая структура файлов и файлы соответственно : main.cpp в main, menu.cpp в menu,...

Написание Makefile
В этой статье будет писаться все что нужно для написания makefile Нам понадобиться: OС - я...

составить makefile
Привет. В общем, у меня такая ситуация. На серваке стоит CentOS, пишу я на g++. Прога использует...

DLL+Makefile
Как cкомпилировать в студии библиотеку с помощью мейка? VS 2012


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru