include makefile, что означает (путь поиска) (без ~ расширения) ...? - PullRequest
2 голосов
/ 11 декабря 2011

Сегодня, когда я строил свой проект с --debug = v, я заметил кое-что, что я не совсем понимаю, что это значит.

Справа вверху, где он включает "вспомогательные make-файлы", есть странная распечатка, которая говорит мне (путь поиска) (без ~ расширения) ... Что это значит?

Распечатка выглядит так:

Reading makefiles...
Reading makefile `Makefile'...
Reading makefile `make_pc.mk' (search path) (no ~ expansion)...
Reading makefile `print_ring/make.mk' (search path) (no ~ expansion)...
Reading makefile `vendor/unity/make.mk' (search path) (no ~ expansion)...
Reading makefile `test01/make.mk' (search path) (no ~ expansion)...

Строка в главном Makefile, которая использует include, выглядит следующим образом:

TEST := test01
include $(TEST)/make.mk

И включенный make-файл может выглядеть так:

CFLAGS  += -Itest01/
OBJ += test_main.o
test_main.o: test01/test_main.c
    @ echo ".compiling"
    $(CC) $(CFLAGS) -o $@ $<

Есть ли лучший способ играть с путями поиска? Но разве ~ расширится до моего домашнего каталога Unix?

Примечание : я делаю это на компьютере с Linux (Ubuntu).

Примечание : Все файлы можно найти в этом проекте github .

/ Спасибо

1 Ответ

4 голосов
/ 11 декабря 2011

Часть этой информации нацелена на людей, отлаживающих саму себя, а не на отладку инфраструктуры сборки их собственных проектов, поэтому не удивительно, если она не документирована или не используется для отслеживания собственных проблем сборки.

Тем не менее, вы можете понять, что они означают, потратив несколько минут с исходным кодом GNU Make.

(путь поиска) - это внутренний флаг RM_INCLUDED, который использует Make, который(Я преувеличиваю) означает, что этот make-файл был обнаружен через include в другом make-файле, и, возможно, был найден путь поиска -I.

(без ~ расширения) является его внутренним флагом RM_NO_TILDE и объясняется в этом комментарии в Make read.c :

/* Expand ~ in FILENAME unless it came from `include',
   in which case it was already done.  */

GNU Make действительно расширяет ~ до домашних каталогов ,и этот флаг предотвращает его повторение дважды - что, я полагаю, могло бы изменить некоторые необычные схемы файловой системы.

...