Как обрабатывать пробелы в именах каталогов внутри make-файла - PullRequest
0 голосов
/ 04 апреля 2020
  • Кажется, пробелы в именах файлов затрудняют работу make-файла ( например, здесь ).

  • Мы можем контролировать имена файлов, но не имя каталога , в котором находится наш проект.

  • Как исправить этот make-файл внутри ~/Downloads/OREN ISH, который использует $(shell pwd):

BASEDIR = $(shell pwd)
${BASEDIR}/main: ${BASEDIR}/main.c
    gcc $< -o $@

Мы получаем следующую ошибку (которая исчезает при удалении ${BASEDIR}):

make: Circular /home/oren/Downloads/OREN <- /home/oren/Downloads/OREN dependency dropped.
make: *** No rule to make target 'ISH/main.c', needed by '/home/oren/Downloads/OREN'.  Stop.

1 Ответ

3 голосов
/ 04 апреля 2020

Невозможно заставить пробелы в целях / предпосылках работать.

У вас есть два варианта:

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

ifneq (1,$(words $(CURDIR)))
$(error Containing path cannot contain whitespace: '$(CURDIR)')
endif

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

...