Какое правило Makefile добавляет .c к отсутствующему include? - PullRequest
0 голосов
/ 07 мая 2018

В make-файле есть утверждение:

include $(PROJECT_CUSTOM_DIR)/project_custom.mak

В некоторых случаях этот файл не существует. В этих случаях мы получаем сообщение об ошибке «нет такого файла или каталога». Однако оказывается, что неявное правило (или что-то еще) добавляет расширение .c, которое затем соответствует одному из наших стандартных правил компиляции .c в .o файлов, и пытается его скомпилировать.

Наше правило по умолчанию для .c файлов выглядит следующим образом:

PROJECT_CUSTOM_DIR   := .

include $(PROJECT_CUSTOM_DIR)/project_custom.mak

C_EXT             ?= c
CXX_EXT           ?= cpp
OBJ_EXT           ?= o

%.$(OBJ_EXT)        :   $(C_SRCS)
    $(COMPILE_C_COMMAND)

Ошибка из журнала здесь:

Makefile:10: project_custom.mak: No such file or directory
gcc -c -fvisibility=hidden -O3 -flto -mtune=generic project_custom.mak.c -o project_custom.mak.o

Я много читал, пытаясь определить, что здесь происходит, и я в тупике. Кто-нибудь может объяснить это поведение?

Кроме того, мне известно, что добавление тире, например -include file.mak, устраняет ошибку, связанную с тем, что файл не найден. Кроме того, отключение неявных правил здесь не вариант.

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Судя по комментариям, я теперь запускаю make с отладкой. Я обнаружил, что Make выполняет нормальную / ожидаемую оценку всех файлов, включенных в include(file). Неявные правила для включаемых файлов - попытаться восстановить их, если они не существуют. Поскольку это не то, что я хотел, я использовал следующее пустое явное правило, чтобы переопределить поведение, и ничего не делал для всех моих включенных файлов. В моем случае это было легко, потому что все они имеют расширение .mak. Вот правило:

%.mak : ;

Спасибо тем, кто добавил отзыв.

...