задаване на въпрос, докато инсталирате с makefile

Опитвам се да създам инсталационен файл за моята библиотека, който има 3 части, която част 2 зависи от част 1, а част 3 зависи от част 2 и част 1.

Възможно е някой да иска да инсталира само една част, сега make-файлът трябва да провери дали вече са инсталирани другите необходими части в местоположението на префикса или не, и ако не иска да зададе въпрос дали потребителят е сигурен, че ще инсталира тази част?

например за да инсталирате част 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)


Това е лоша форма. Накарайте лицето, което работи, вместо това да му предаде променливи, съдържащи подходящите стойности.

person Ignacio Vazquez-Abrams    schedule 06.06.2011
comment
Вече в make файла има 4 цели, make part1, make part2, make part3 и make all. И няма проблем, ако някой инсталира част 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 и след това правим part2. Как можем да използваме 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