LINUX.ORG.RU

Вопрос о make


0

0

Есть следующие правила:

test_build: test.o
    @echo "Building test..."
    $(CC) $(CFLAGS) $(LIBS) -o test test.o

test.o: test.c

test: test_build
    @echo "Running test..."
    ./test

Почему не срабатывает тело правила test при вызове make test?
★★★★★
Ответ на: комментарий от tailgunner

Тогда пересборка будет выполняться каждый раз заново, даже если в .PHONY записать только test.

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

> Тогда пересборка будет выполняться каждый раз заново, даже если в .PHONY записать только test.

o_O

Странный у тебя make...

tailgunner ★★★★★
()

Phony тут не нужны. Лучше сделать так:

test: test.o
    @echo "Building test..."
    $(CC) $(CFLAGS) $(LIBS) -o test test.o

test.o: test.c
    #странно, что тут нет инструкций :)

execute_test: test
    @echo "Running test..."
    ./test

Ващ тест будет запускаться командой make execute_test

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

Кстати да, я немного напортачил в процессе составления Makefile :) В директории был файл test_build. Теперь всё работает, но test_build всё равно выполняется каждый раз заново (в отличие от test.o).

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

>test.o: test.c
> #странно, что тут нет инструкций :)

Используется правило по умолчанию.

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

> Phony тут не нужны.

Из руководства по make: "A phony target is one that is not really the name of a file", так что я бы поставил в любом случае.

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

>> Phony тут не нужны.

>Из руководства по make: "A phony target is one that is not really the name of a file", так что я бы поставил в любом случае.

Стоит юзать make как make, а не как bash скрипт. Если использовать первоначальный makefile и объявить

.PHONY: test test_build

то каждый раз у нас будет выполняться линковка при наборе make test_build, как и сказал seiken. И это правильное поведение make.

Надо взять мой makefile и все будет работать и запускаться. А если есть страх, что в директории заведется файл с именем execute_test, то можно добавить

.PHONY: execute_test

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

Я просто упустил, что в данном случае test - это имя программы. Конечно, тогда его не надо в .PHONY

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