Как проверить, существует ли каталог в make и создать его

В моей директории проекта у меня есть некоторые поддиры: code/, export/, docs/ и object/. То, что make делает, просто скомпилирует все файлы из каталога dir и поместит файлы .o в каталог dir.

Проблема в том, что я сказал git игнорировать все .o файлы, потому что я не хочу, чтобы они были загружены, поэтому он также не отслеживает объект-каталог. Я на самом деле в порядке с этим, я не хочу, чтобы object/ загружался в мою учетную запись GitHub, но с текущим решением (которое представляет собой простой пустой текстовый файл внутри директории object/), каталог действительно получает загружен и должен присутствовать перед сборкой (make файл просто предполагает его там).

Это не похоже на лучшее решение, так есть ли способ проверить, существует ли каталог до сборки в файле make, и создать его, если это так? Это дало бы возможность, чтобы объект dir не присутствовал при вызове команды make и впоследствии создавался.

Ответ 1

Просто установите для него цель:

object/%.o: code/%.cc object
    compile $< somehow...

object:
    mkdir [email protected]

Вы должны быть немного более осторожны, если хотите защитить от возможности файла, называемого "объект", но это основная идея.

Ответ 2

Вставьте команду mkdir в цель.

object/%.o : code/%.cc
    @mkdir -p object
    compile $< somehow...

"-p" не приводит к ошибке, если каталог уже существует.

Ответ 3

Единственный правильный способ сделать это - только заказы-предпосылки, см. https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html. Обратите внимание на | в фрагменте.

Если вы не используете предварительные условия только для заказа, каждая модификация (например, копирование или создание файла) в этом каталоге приведет к повторению правила, которое зависит от цели создания каталога!

object/%.o: code/%.cc | object
    compile $< somehow...

object:
    mkdir -p [email protected]