LINUX.ORG.RU

GNU make, странная цель по умолчанию

 ,


1

3

Привет олл

Век живи век учись. Наткнулся на престранную проблему с GNU Make’ем. Есть довольно большой Makefile В нем масса целей определена. Первая определенная - all.

Ну и между прочим есть и такая

local-defs.mak:
        @echo "#This is default config file" > $@

И находится она почти в самом конце файла. И совсем от нее никто не зависит…

Так вот именно ее make нарекает дефолтной что б я не делал…

local-defs.mak:
#  A default, MAKEFILES, or -include/sinclude makefile.
#  Implicit rule search has not been done.
#  Implicit/static pattern stem: ''
#  File does not exist.
#  File has not been updated.
# automatic
# @ := local-defs.mak

Прощу помощи, ума не приложу что не так и как исправить…

★★★★★

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

Руководство читайте, если в начале есть .DEFAULT_GOAL := то это переопределялка цели, также если правильно помню то если цель по умолчанию не определена, то берётся первая цель не начинающаяся с точки. В остальном - вам что нужно то ? Вызвать make для желаемой цели ? так вызовите, если цель по умолчанию ничего не делает, значит разработчик умышленно посчитал правильным, чтобы при сборке требовалось указывать нужную цель, почитайте readme или посмотрите что вам нужно среди целей.

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

Собственно потому и загадка. первая цель и правда `all`, до нее только переменные...
дефаулт гол конечно же тоже попробовал и без еффекта - чушь какая-то...
мейк для желаемой цели тоже зовется без проблем, просто мейк с дефолтной целью (тоесть когда в cmd нет параметров) почему-то зовет такую-вот странную цель...

Может имя цели какое-то магическое... хз...

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

Там куча всякой чепухи корпоративной вхардкожено, чистить не перечистить... Я в gnu make вобщем-то умею но вот такая дичь впервые...хз, мож какую-то умную рандомную подсказку услышу...

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

запускать make all

еще можешь попробовать выкинуть эту странную цель и посмотреть что будет

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

Перестать нагонять туман, сократить мэйкфайл до минимального неработающего примера и запостить вместе с выводом make -d. Где-то на полпути поймёшь ответ.

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

Вообще без самого файла на форуме вам только погадать могут, предположу ещё как вариант, что мб что-то доподключается, но повторюсь это только догадки

AKonia ★★★
()

local-defs.mak

Где-то include local-defs.mak, ищется файл в одном месте, а создаётся в другом?

#  A default, MAKEFILES, or -include/sinclude makefile.
#  Implicit rule search has not been done.
#  Implicit/static pattern stem: ''
#  File does not exist.

Это что такое выводит?

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

дебаг флаг --print-data-base

Хм... Кажись попал в точку :)

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

Да, проверил. Оказывается если есть инклуд на такой файл(причем даже если «-include»), и есть таргет на его создание, то таргет буде создаваться даже если по всем явным правилам не должен… т.е. имея

all:
        echo "This is all"

file.txt:
        echo "#Inc file" > $@

-include file.txt

При любом раскладе сначала выполнится цель file.txt и только затем all

Вывод таков что правила нужно писать не используя фактическое имя файла (даже фони не помагает)

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