Чтобы вызывать мой Makefile из разных мест без путаницы относительных путей, я ссылаюсь на пути, используя переменную Makefile, как указано в другой ответ :
DIR=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
Я получаю MAKEFILE_LIST
отличается, когда я включаю другие файлы, но, поскольку я сохраняю его значение в переменной, прежде чем делать какие-либо включения, я удивляюсь, что значение переменной отличается.
Пример:
$ tree .
.
├── another_file
└── subdirectory
└── Makefile
$ cat Makefile
DIR=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
test:
@echo $(DIR)
#include $(DIR)/../another_file
$ make
/subdirectory
Так же, какожидается. Но если я раскомментирую строку включения, я получу
$ make
/
, что для меня не имеет смысла, поскольку another_file
по-прежнему включен без ошибок, указывающих, что значение $(DIR)
равно /subdirectory
.
Обратите внимание, что цель make помещается перед оператором include, и поведение не изменяется при переключении порядка. Полагаю, это связано с предварительной обработкой, но это все еще не объясняет мне, почему $(DIR)
имеет разные значения.
$ make --version
GNU Make 3.81
...
This program built for i386-apple-darwin11.3.0