Зробити мені здається просто скриптом оболонки з трохи простішим керуванням аргументами командного рядка.
Чому стандартно запускати make замість ./make.sh
Зробити мені здається просто скриптом оболонки з трохи простішим керуванням аргументами командного рядка.
Чому стандартно запускати make замість ./make.sh
Відповіді:
Загальна ідея полягає в тому, що make
підтримується (розумно) мінімальна перебудова, тобто ви кажете йому, які частини вашої програми залежать від інших частин. Коли ви оновлюєте частину програми, вона лише відновлює ті частини, які залежать від цього. Хоча ви могли це зробити зі скриптом оболонки, було б набагато більше роботи (явно перевіряючи останні змінити дати на всіх файлах тощо). Єдиною очевидною альтернативою сценарію оболонки є щоразу відновлювати все. Для крихітних проектів це цілком розумний підхід, але для великого проекту повна перебудова може зайняти годину або більше - використовуючи make
, ви можете легко виконати те саме за хвилину-дві ...
Ймовірно, слід також додати, що існує досить багато альтернатив, які мають, принаймні, широко подібні можливості. Особливо у випадках, коли у великому проекті відновлюється лише декілька файлів, деякі з них (наприклад, Ninja ) часто значно швидше, ніж створюють.
Існують різні речі, які важко зробити із скриптами оболонки ...
Переконайтесь, що під час внесення змін у вихідні файли перекомпілюються лише необхідні файли.
Наприклад:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
Якщо я змінити файл і 2.h
лише запустити make
, він виконує всі 3 команди в зворотному порядку.
Якщо я змінити файл і 1.c
лише запустити make
, він виконує лише перші 2 команди в зворотному порядку.
Намагання досягти цього за допомогою власного сценарію оболонки потребуватиме багато if/else
перевірки.
rsync -r -c -I $SOURCE $DEST_DIR
в оболонці.
Як і вище сказане, Make є декларативною (-іш) паралельною мовою програмування.
Скажімо, у вас є 4000 графічних файлів для конвертації та 4 процесора. Спробуйте написати 10-рядковий сценарій оболонки (я тут щедрий), який зробить це надійно, насичуючи ваші процесори.
Можливо, справжнє питання полягає в тому, чому люди турбують написання скриптів оболонок.
зробити залежність ручок: makefile описує їх: двійковий файл залежить від об'єктних файлів, кожен об’єктний файл залежить від вихідного файлу та заголовків ... при запуску make порівнюється дата файлів для визначення того, що потрібно повторно компілювати .
Можна звернутися безпосередньо до однієї цілі, щоб не будувати все, що описано в Makefile.
Більше того, синтаксис make забезпечує заміну, vpath
Все це можна записати в сценарії оболонки, змусити вас це вже мати.