LINUX.ORG.RU

вопрос по make

 


0

2

есть два простых make файла, лежат в папке ./ и ./src там еще есть папка ./include, тот, что в ./

SRC_DIR := ./src

all:
        make -C $(SRC_DIR) all
тот что в ./src
PROG := main
INC_DIR := ../include

all: $(INC_DIR)/$(PROG).h $(PROG).c
        $(MAKE) $(PROG)

в общем вопрос, если я сделаю touch ./src/main.c, то проект пересобирается, если делаю touch ./include/main.h, то говорит, что проект is up to date, почему не пересобирается и как сделать, чтобы пересобирался?

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

без разницы, что в корне, что в ./src если touch main.c, то пересобирает, если touch ../include/main.h, up to date

IvanR ★★★
() автор топика

Надо вроде такого:

PROG := main
INC_DIR := ../include

all: $(PROG).c
        $(MAKE) $(PROG)

$(PROG).o: $(INC_DIR)/$(PROG).h

Иначе all пересоберётся, но так как объектные файлы не зависят от заголовка, то они будет считаться up-to-date, соответственно и исполняемый файл тоже.

Т.е. в исходном варианте зависомости: prog -> object -> source. А в том, что выше: prog -> object -> (source, header).

xaizek ★★★★★
()

У тебя неявная цель main, которую ты собираешь в $(MAKE) $(PROG), зависит только от main.c, вот он и пишет, что up to date.

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

все заработало, спасибо.

если кому интересно, то так:

$(PROG): $(PROG).c ../$(INC_DIR)/$(PROG).h

.PHONY clean all
all:
        $(MAKE) $(PROG)

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от tensai_cirno

Кем и с чего? Тут хармфул только в том, что для phony-таргетов зачем-то прописаны все зависимости, когда для реального таргета их явно не хватает. То же самое можно было нах**вертить и в одном файле.

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

Нет, дело в том что корневой мэйк ничего не знает о файлах в дочернем, поэтому надо писать phony-таргет, который будет дёргать make всегда. Поэтому harmful.

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

Поэтому harmful.

Ясно, понятно. Попробуй сам себе перед зеркалом, своими словами, объяснить суть харма, может осенит, что «harmful» != «не модно среди хипстеров».

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