Ресурсы для изучения GNUMake? - PullRequest
13 голосов
/ 21 октября 2008

Я пытаюсь изучить GNUMake для небольшого проекта, над которым я работаю. Пока что даже «базовые» уроки кажутся довольно грубыми, и мне еще предстоит разобраться в синтаксисе make-файла.

Есть ли у кого-нибудь хорошие ресурсы для начинающего, чтобы познакомиться с GNUMake?

Ответы [ 6 ]

13 голосов
/ 21 октября 2008

Полное руководство: http://www.gnu.org/software/make/manual/make.html
Есть более подробная книга «Управление проектами с помощью GNU Make». Вы также можете использовать более ранние версии, они не охватывают GnuMake специально, но намного тоньше.

Make - грязный секрет среди разработчиков - никто из нас не понимает этого, мы просто заимствуем скрипт make у кого-то другого и изменим его. Я предполагаю, что только один сценарий был написан с нуля (вероятно, создателем инструмента).

Когда вам нужно сделать больше, чем простой пример, большинство людей либо переключаются на более современную систему сборки, такую ​​как Ant, либо запускают свою собственную в Perl / Python / и т.д.

3 голосов
/ 26 июня 2015

«Управление проектами с помощью GNU Make, 3-е издание» включено в «Лицензию на бесплатную документацию GNU» и может быть легально прочитано на сайте бесплатно:

3 голосов
/ 21 октября 2008

Наиболее часто используемые функции make можно разбить на пару простых понятий, целей, зависимостей и переменных.

Цели - это то, что вы хотите построить, но команды под целью могут быть командами компилятора или сценариями. Обычно каждая цель относится к модулю в вашем коде, но вы можете сделать их настолько детализированными, насколько вы хотите, чтобы они соответствовали вашему проекту.

Зависимости - это файлы или другие цели в вашем проекте. Лучший пример этого для проекта C, где вы строите двоичный файл из набора объектных файлов. Каждый объектный файл должен существовать, прежде чем вы сможете построить двоичный файл, поэтому make будет обходить ваши цели до тех пор, пока все зависимости не будут завершены, а затем выполнить команду для общей цели.

Переменные не всегда нужны, но довольно удобны для обработки таких вещей, как флаги компилятора. Каноническими примерами являются CC и CCFLAG, которые будут ссылаться на компилятор, который вы используете, например, gcc, и флаги типа -ansi -Wall -o2.

Еще пара общих советов и подсказок:

  • Команды должны выполняться с символом [tab], иначе они не будут выполнены, это просто старая реликвия make, я не помню, почему это так.
  • По договоренности вы можете включить цель цели, чтобы указать значение по умолчанию, которое должно быть значением по умолчанию. Это полезно, когда у вас есть сложный make-файл и есть конкретная цель, которую вы всегда хотите использовать по умолчанию.
  • Ваш make-файл должен называться make-файлом или Make-файлом, но если вы хотите назвать его как-нибудь еще, используйте $ make -f [makefilename]
  • Всегда используйте полный синтаксис раскрытия переменных, т. Е. $ (VARIABLE), иначе make может не выводить нужные вам команды.
  • make может работать рекурсивно, поэтому, если у вас есть несколько подмодулей в вашем проекте, которые находятся внутри каталогов, вы можете вызвать make для make-файла подкаталога изнутри make для сборки каждого.
  • Если у вас действительно сложный проект, для которого требуются сценарии установки и т. Д., Вы, вероятно, также захотите изучить автоинструменты, которые сгенерируют для вас make-файл и выполнят ряд трюков, чтобы проверить существование библиотеки и другие проблемы с переносимостью.
2 голосов
/ 21 октября 2008

Я согласен с предложением книги О'Рейли.

Для некоторых полезных советов, уловок и идей, посмотрите на Mr. Сделать статьи

0 голосов
/ 06 июля 2012

Я не большой поклонник информационной системы GNU, но я считаю, что информационные страницы GNU очень полезны. После того, как вы узнаете самые основные понятия и примерно, какие вещи доступны, я обнаружил, что информационные страницы являются самым быстрым способом ссылки на информацию, например, на готовые функции.

(Забудьте программу GNU info и используйте вместо этого, например, pinfo.)

0 голосов
/ 21 октября 2008

mgb: еще хуже. Однажды я написал сложную систему make с нуля (несколько тысяч файлов, пятьдесят или сто каталогов, четыре или пять компиляторов и целей кросс-компиляции, 2 ОС и т. Д.). Я сел и узнал, что сначала GNU Make внутри и снаружи, спроектировал систему, сначала поиграл с прототипом. Мы все были очень довольны результатом.

Но это было много лет назад. Вы знаете, как я пишу их сегодня? Так же, как вы описываете. Это просто достаточно рискованно, а детали синтаксиса достаточно неясны, чем, если вы не сделаете это довольно регулярно, вы не сможете запомнить детали. Я думаю, как и любой другой язык с неинтуитивным синтаксисом и некоторыми необычными правилами.

...