Как проверить, существует ли каталог в 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]