Makefile прервать make, если папка не найдена - PullRequest
0 голосов
/ 08 января 2020

У меня есть простой Makefile, который опирается на указанную c структуру папок. Я хотел бы добавить тест, чтобы Makefile завершился неудачно с сообщением о том, что пользователю не хватает папки.

Моя цель выглядит так:

check_folders:
    test -d ../some_folder || $(error The ../some_folder folder does not exist)

.PHONY: check_folders

Я ожидал схема логика c здесь, поэтому, если первый оператор проходит (и папка существует), второй оператор не выполняется. Но это не работает, ошибка выдается, даже если папка существует:

$ mkdir ../some_folder
$ make check_folders
makefile:24: *** The ../some_folder folder does not exist.  Stop.

Любая помощь приветствуется!

Спасибо!

1 Ответ

1 голос
/ 08 января 2020

Вы используете возможность make для выдачи ошибок, а не возможность оболочки. Все переменные и функции make в рецепте раскрываются first , ДО вызова рецепта.

У вас есть два варианта. Первый - полностью переключиться на неудачу рецепта: make остановится, если рецепт выйдет с ошибкой. Таким образом, вы можете написать свое правило следующим образом:

check_folders:
        test -d ../some_folder || { echo The ../some_folder folder does not exist; exit 1; }

Другой вариант - полностью перейти на тестирование; это произойдет до того, как будет вызван ЛЮБОЙ рецепт, так как make-файл анализируется:

$(if $(wildcard ../some_folder/.),,$(error The ../some_folder folder does not exist))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...