2016-06-01 3 views
1

Я довольно долго компилирую приложение, используя Makefile. Сегодня я понял, что мой Makefile больше не работает. Немного отладки и вскоре я узнал, что $(HOME) не был определен

$echo $(HOME) 
-bash: HOME: command not found 

Я всегда думал, что $HOME и $(HOME) могут быть использованы как взаимозаменяемые. Есть ли причина, по которой система может быть сконфигурирована, чтобы избежать использования $(HOME)?

+1

Make and Bash используют разные синтаксисы. Запуск кода для одного в другом - не такая хорошая идея. – Biffen

ответ

8

Это ${HOME}, а не $(HOME).

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

Однако $(HOME) - это правильный синтаксис в файле Makefile. Если вам нужна помощь в отладке вашего файла Makefile, вам нужно будет показать нам, что в нем, или, лучше, небольшой Makefile, который демонстрирует ту же проблему. make правило как:

target: 
     echo $(HOME) 

должен напечатать путь вашей домашней директории при запуске make target.

В оболочке вы можете обратиться к переменной HOME как $HOME или как ${HOME}; последний может избежать проблем с соседними маркерами.

В Makefile вы можете использовать либо $(HOME), либо ${HOME}, но форма $(HOME) более распространена. Вы можете опустить скобки только в том случае, если имя переменной длино один символ (но даже тогда вы должны использовать их для ясности). (Никто не утверждал, что make - это модель четкого и интуитивно понятного синтаксиса.)

+0

Это обязательно должно быть комментарий и закрытое голосование. Вы должны знать лучше – hek2mgl

+3

@ hek2mgl: Я не согласен. Не стесняйтесь голосовать, если хотите. –

+2

@ hek2mgl Я на самом деле думаю, что это конструктивно – Manolete

Смежные вопросы