Наскільки важливо вивчити файли? [зачинено]


12

Я працюю в С ++ здебільшого як хобі (я ще в школі, і для цього немає справжньої роботи). Ідентифікатори створюють для мене makefile, і тому мені цікаво, чи варто навчитися їх робити самостійно. Я маю на увазі під «варте навчання», чи варто мені кинути все і навчитися їх писати, перш ніж продовжувати вивчати c ++? Чи буде їх вивчення справді необхідним? Якщо так, чи варто мені дізнатися про них (загальний синтаксис та розуміння того, як вони працюють тощо) чи справді навчитися їх писати?


1
більшість проектів з відкритим кодом так чи інакше використовують файли. Отже, так, ви повинні дізнатися, як працюють файли. Писати їх вручну - це вже інша історія, і слід уникати, не віддаючи перевагу генеруванню їх за допомогою якогось інструменту, за винятком того, що у вас дуже мало файлів або ви можете використовувати загальні / неявні правила та інші подібні методи
permeakra

якщо ви хочете, щоб інші збирали ваше джерело в Linux та інших операційних системах на базі Unix, вам потрібно їх вивчити.

Ви можете навчитися основам файлів, залежностей та замін тощо, за
короткий

Відповіді:


14

Так, це, безумовно, варто зрозуміти, як працюють Makefiles. Зараз це може не стосуватися вас (оскільки ви використовуєте IDE, який їх генерує), але шанси на те, що знання будуть корисні в майбутньому.

Я маю на увазі під «варте навчання», чи варто мені кинути все і навчитися їх писати, перш ніж продовжувати вивчати c ++?

Відверто кажучи, це химерне поняття "варто вчитися" ...

Але ні, я не думаю, що вам це потрібно робити.

Чи буде їх вивчення справді необхідним?

Ми не можемо передбачити, чи справді вам будуть потрібні ці знання в майбутньому. Це залежить від того, продовжуєте ви програмування на C ++ і в якому контексті ви це робите.

Якщо так, чи варто мені дізнатися про них (загальний синтаксис та розуміння того, як вони працюють тощо) чи справді навчитися їх писати?

Я б рекомендував обидва. Якщо ви не можете написати Makefile, то можна дискутувати, що ви знаєте, що відбувається.

Є й інша точка зору, яка говорить про те, що занадто багато знань не є корисними.

Якщо ви глибоко заглибитесь у це, то дізнаєтесь, що існує багато різних версій Make, і що писати складний Makefile, який працює з декількома версіями Make на декількох платформах, ... важко. Тим НЕ менше, в світі з відкритим вихідним кодом, це «найкраща практика» для інструментів використання , таких як automake, autoconfі так далі , щоб генерувати мейкфайли, і т.д. Якщо ви зробите це, багато складності версії / платформу , пов'язаної розглядаються за лаштунками .


Нарешті, ви позначили це питання "java". Я вважаю, що ви не повинні використовувати makeдля створення програм Java (якщо ви також не створюєте нативну бібліотеку коду). Є спеціальні інструменти побудови Java, які набагато простіше у використанні ... і роблять кращу роботу, ніж make.


8

Якщо ви працюєте з відкритим кодом або Unix-подібними операційними системами, так. Хоч душі, вони не такі складні. Навчання makeзаощадить вам багато часу в довгостроковій перспективі.


Навчання читання чи навчання письму?

І те й інше. Ви хочете знати, як його читати, щоб ви могли налагоджувати проблеми програмного забезпечення, яке ви використовуєте, або писати так, щоб ви могли створити своє власне.
EhevuTov

Тоді я повинен не погодитися з письмовою частиною. Існує багато інших - можливо набагато кращих - способів автоматизувати побудови. Писати корисні відеофайли далеко не банально і не обов'язково.

3

Makefiles важливі в системах UNIX (наприклад, AIX, Linux, OS X). Однак я думаю, що їхнє абсолютне значення "ти мусиш це знати" за останні роки зменшилося. Наприклад, ви насправді не знаходите їх у розробці Windows (Visual Studio тощо), а XCode (в OS X) взагалі використовує іншу систему. Я не дуже в Java, але там я думаю, що вони використовують мурашині файли та інше.

Існує дуже класна система під назвою CMake, яка генерує вбудовані файли збірки для операційної системи, на яких ви, звичайно, працюєте. Наприклад, якщо ви пишете специфікацію свого проекту в CMake, тоді ви можете створити проект побудови Visual Studio для Windows, проект XCode на Mac та Makefile в Linux. Певним чином, CMake замінює autoconf та automake.

Зазвичай я створюю файли CMake для моїх "великих проектів", але я знаю "Зробити на випадок, якщо я хочу написати швидкий" просто заверши "Makefile. Це добре для вашої культурної грамотності, адже є тонни і тони бібліотек програмного забезпечення, які використовують Makefiles, і вам неминуче потрібно буде редагувати конкретні компілятори та місце розташування бібліотек. Але ви виявите, що великі проекти (наприклад, KDE) мігрують у напрямку CMake тощо, оскільки Make має деякі обмеження, які перетворюють їхню некрасиву голову, коли проекти ускладнюються.


Навчання CMake буде на порядок вигідніше. Makefiles можна розглядати як детальну інформацію про реалізацію - не перешкоджайте навчанню їх (поки дійсно не змушені), як і файли проектів Visual Studio.

2

Я є упередженим, оскільки я думаю, що файли - це жахлива система. Ви повинні вивчити загальний синтаксис, щоб ви могли змінити існуючий makefile. Але я не думаю, що вивчати все про це і не робити це з нуля корисно.


Хочете пояснити, чому файли - це жахлива система? У порівнянні з чим?
JonnyJD

@JonnyJD: Одне, я не вважаю, що хороша система збирання повинна була б вам поставити файл make в кожен підкаталог. Але це погано, оскільки його не набагато простіше у використанні, то написання bat-файлу, який насправді щось говорить.

Звучить більше, як вам не подобається створювати файли збирання вручну. Що само по собі не є великою справою. Makefiles - це варіант, який повинен мати можливість читати та писати вручну. (модульований, просто спрощений відстеження залежності порівняно з bash / bat) Автоматизована частина є автоматичною. Єдине, що насправді набагато відрізняється - це вказати залежності в графічному інтерфейсі та зберегти все це в одному файлі проекту. Або яка система побудови така набагато менш жахлива?
JonnyJD

2

Як і у багатьох аспектах виводу IDE, типовий автоматично створений makefile часто недостатньо структурований.

Маючи відповідний рівень розуміння, часто можна значно покращити продуктивність (швидше будувати тощо). Однак, якщо ви дійсно не знаєте, що відбувається, ви, швидше за все, FUBAR, коли зіштовхуєтесь з файлом з автоматичним редагуванням.

Я настійно рекомендую мати можливість зрозуміти, що відбувається ... чи вирішите згодом розпочати редагування наявного чи створити свій власний - окрема проблема.


2

Уміння успішно використовувати makeабо щось подібне дозволяє перевірити поле "розуміє, як моделювати залежності між частинами програми, що складаються з більш ніж одного модуля".


1

Навчитися писати Makefiles - це гарна ідея з кількох причин.

  1. Make - це мова, яка дозволяє кодувати залежності між компонентами за допомогою правил. Ви отримаєте великий досвід написання коду таким чином, і це розширить ваші інструменти для роздумів щодо вирішення проблем програмування.
  2. Принципи, які ви вивчаєте за допомогою Make, можна використовувати з Ant, Maven та Rake, якщо ви вирішите вивчати програмування у світі Java або Ruby.
  3. Багато IDE мають магічні файли, які містять інформацію про конфігурацію, щоб допомогти вам створити програмне забезпечення. Якщо ви мені не вірите, спробуйте написати сценарій для створення свого програмного забезпечення без IDE. Коли ви пишете власні Makefiles, ви дуже розумієте залежності між вашим кодом, бібліотеками та змінними вашого середовища. Коли системи збільшуються, це виявляється корисним інструментом для налагодження вашої системи.

0

Ви завжди повинні намагатися зрозуміти систему побудови, яку ви використовуєте.

Це не обов'язково означає, що ви повинні мати можливість створювати всі файли збірки вручну. Важливою частиною є розуміння того, що система збирання робить для вашого проекту, і загальна здатність збирати невеликі проекти вручну (як у «введенні команд на терміналі»).

Я просто схильний думати, що створення (простих) Makefiles - це найпростіший крок, щоб зрозуміти, що відбувається, але у вас можуть бути інші засоби розуміння того, як будувати речі.

Чому / коли вчитися Makefiles

Якщо ви продовжуєте програмувати лише для Windows і не сподіваєтесь, що хтось інший скомпілює ваш код, сміливо складіть код так, як вам подобається.

Якщо ви хочете запрограмувати компілятор агностик (як у "нехай інші вирішують, який компілятор чи IDE вони хочуть використовувати"), тоді вам слід вивчити іншу систему побудови, ніж просто дозволяти вашому IDE "займатися цим".

Якщо ви хочете запрограмувати різні платформи, то вам неодмінно потрібно використовувати широко розроблену систему збірки.

Це все ще не означає, що ви повинні знати, як автогенеровані Makefiles працюють докладно. Ви просто повинні знати, як працюють вхідні файли для системи збирання. Іноді вони мають подібний синтаксис.


Мені особисто дуже подобаються Makefiles і використовую їх для багатьох речей. Не тільки компілюючи код. Я створюю Makefile для кожного більшого PDF-файлу, який я створюю (за допомогою LaTeX), і для кожного проекту мені потрібно автоматизувати пару завдань (створення, упаковка, завантаження, оновлення залежностей із сховищ джерел, витягування / натискання вручну резервних копій)

Однак я багато працюю над терміналом і працюю з Linux. Я не використовую те, що ви б назвали IDE, крім vim (потужний текстовий редактор) та консольні інструменти. Це може бути для вас дуже різним.

Якщо ви коли-небудь скаржилися на необхідність запускати різні команди, що повторюються, лише для "оновлення" / пакета / завантаження / .. "проекту", то навчитися писати Makefiles може бути для вас корисним.

Якщо у вас є і використовуєте інструменти / графічні інтерфейси / IDE для всього, ви, можливо, нічого не отримаєте з цих знань.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.