задавать вопрос при установке с помощью makefile

Я пытаюсь создать установочный файл для моей библиотеки, который состоит из 3 частей, часть 2 зависит от части 1, а часть 3 зависит от части 2 и части 1.

Возможно, кто-то хочет установить только одну часть, теперь makefile должен проверить, установлены ли уже другие необходимые части в месте префикса или нет, и если нет, задать вопрос, уверен ли пользователь, что установит эту часть?

например, чтобы установить часть 2, make-файл должен проверить, установлена ​​ли часть 1 или нет, и если это не установлено, спросить: «Вы уверены, что хотите установить часть 2 перед частью 1?»

Должен добавить, что в make-файле уже есть 4 цели: make part1, make part2, make part3 и make all. И нет проблем, если кто-то установит часть 3 без установки части 2 или 1, но я хочу проверить это, потому что возможно, что кто-то установил неправильную часть.

Как мне это сделать? любая идея будет оценена


person csuo    schedule 06.06.2011    source источник
comment
Зачем задавать вопрос? Вы действительно хотите позволить пользователю установить часть, которая не работает?   -  person Beta    schedule 07.06.2011


Ответы (2)


Это плохая форма. Вместо этого попросите человека, выполняющего make, передать ему переменные, содержащие соответствующие значения.

person Ignacio Vazquez-Abrams    schedule 06.06.2011
comment
Уже в make файле есть 4 цели, сделать часть1, сделать часть2, сделать часть3 и сделать все. И нет проблем, если кто-то установит часть 3 без установки части 2 или 1, но я хочу проверить это, потому что возможно, что кто-то установил неправильную часть. - person csuo; 07.06.2011
comment
Затем сделайте part3 зависимым от part2, а затем, в свою очередь, part1. Если пользователь установил их за пределами местоположения по умолчанию, ему нужно будет указать это местоположение, чтобы найти их. - person Ignacio Vazquez-Abrams; 07.06.2011
comment
Да, угрюмо, как указано в моем вопросе в месте префикса, поэтому, если они где-то установили, а теперь хотят установить в другом месте, программа должна задать этот вопрос - person csuo; 07.06.2011
comment
Не задавайте вопросов во время запуска make. Стандартной практикой является наличие сценария ./configure, который задает такие вопросы. - person reinierpost; 07.06.2011
comment
но после выполнения ./configure мы решаем, какую часть нужно установить, например, ./configure и затем делаем часть2. Как мы можем использовать configure.ac в этом случае? - person csuo; 07.06.2011
comment
./configure обычно дает вам варианты того, какие дополнительные части или функции программного обеспечения следует включать, они обычно имеют имена, начинающиеся с --with- — обратите внимание, что я ненавижу настраивать интерактивные сценарии, потому что они затрудняют создание сценариев. - person reinierpost; 07.06.2011

Насколько я понимаю, чтобы установить part2, make должен установить и part1, и part2. Это должно быть объявлено как зависимость. Тогда part3 зависит от part2, что означает, что make part3 должен установить все три части: part1, потому что part2 зависит от него, и part2, потому что part3 зависит от part3.

Таким образом, цель all должна зависеть от part3, и все будет установлено.

make не должен задавать вопросы, а разрешать зависимости автоматически. Если пользователь хочет установить part3, то его зависимости также должны быть установлены; иначе это не сработает, не так ли?

person Alexey Ivanov    schedule 07.06.2011
comment
Спасибо за ваш ответ, да, это цель, и, например, это работает так, но как мне избежать переустановки? Я имею в виду для установки части 2, если часть 1 уже установлена, она не должна устанавливать ее снова. - person csuo; 07.06.2011
comment
@mahD Это будет зависеть от того, как определить, установлен он или нет. Здесь может быть два возможных подхода: 1. создать дополнительную цель или объявить зависимости, чтобы make мог разобраться сам; 2. написать что-то похожее на bash-скрипт в partX таргетах. он проверит наличие ожидаемых файлов и выполнит копирование только в том случае, если они не будут найдены. - person Alexey Ivanov; 09.06.2011