Делать:$(подстановочный знак), удерживающий открытый каталог

StackOverflow https://stackoverflow.com/questions/204115

  •  03-07-2019
  •  | 
  •  

Вопрос

Итак, похоже, существует проблема с функцией GNU Make $(wildcard), сохраняющей каталог открытым в Windows.См. пост (без ответа) "make держит каталог открытым".Google не предоставляет много информации по этой теме.

Суммируя:Makefile в какой-то момент использует функцию $(wildcard) и оставляет каталог открытым, что обычно не позволяет правилу make clean выполнить свою работу правильно.Повторный запуск команды make clean во второй раз обычно решает эту проблему.

Я использую GNU Make версии 3.81 под стандартной DOS-Box.Автор сообщения, ссылка на которое приведена выше, использует Cygwin.

Кто-нибудь нашел решение этой проблемы?

Это было полезно?

Решение 2

я нашел обходной путь за проблему, которая, по крайней мере, позволяет мне спокойно работать.

Проблема заключалась в том, что $(wildcard) Функция использовалась для сбора исходных файлов.Однако мое чистое правило удаляет только каталог - сбор не требуется.Поэтому я поместил ту часть Makefile, которая должна собрать исходные файлы, в условный оператор:

# The clean rule is always parsed
clean:
    rm -rf $(OUTPUT_DIRECTORY)

# The compile rule is only interpreted if we did not invoke 'make clean'. We
# can test the value of $(MAKECMDGOALS) for that:
ifeq ($(filter $(MAKECMDGOALS),clean),)

SOURCE_FILES := $(wildcard ...)

compile:
    g++ $(SOURCE_FILES) ...

endif

Другие советы

Звучит как утечка файлового дескриптора, да, безвредно для очень недолговечных процессов (таких как make) в UNIX, но подходит для PITA в Windows.

Поскольку это предположительно ошибка в make, а не проблема с ее использованием, ее следует устранить сначала путем проверки того, что она все еще существует при сборке из исходного кода в новейшей исходной версии, а затем отправка отчета об ошибке с проектом GNU make (или с любым дистрибьютором, с которым у вас есть соответствующий контракт на поддержку), или погрузиться в исходный код и попытаться исправить его самостоятельно.

Не помешало бы попробовать воспроизвести в Linux — здесь проверка на утечку файловых дескрипторов намного проще, так как можно просто посмотреть /proc/self/fd (или, для состоятельного ребенка, /proc/$PPID/fd) за чужие вещи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top