Вопрос

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

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

Это было полезно?

Решение

Окончательное руководство таково http://www.gnu.org/software/make/manual/make.html
Существует книга О'Рейли "Управление проектами с помощью GNU Make", в которой содержится больше пояснений.Вы также можете использовать более ранние версии, они не охватывают GNUmake конкретно, но намного тоньше.

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

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

Другие советы

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

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

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

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

Еще пара общих советов и хитростей:

  • Команды должен должны быть продолжены символом [tab], иначе они не будут выполнены, это просто старый пережиток make, я не помню, почему это так.
  • По соглашению, вы можете захотеть включить цель all, чтобы указать значение по умолчанию, которое должно быть целевым по умолчанию.Это полезно, когда у вас сложный makefile и есть конкретная цель, которую вы всегда хотите использовать по умолчанию.
  • Ваш makefile должен называться makefile или Makefile-файл, но если вы хотите назвать его как-то по-другому, используйте $make -f [makefilename]
  • Всегда используйте полный синтаксис расширения переменной , т. е.$(ПЕРЕМЕННАЯ) или make могут выводить не те команды, которые вы хотите.
  • make может работать рекурсивно, поэтому, если у вас в проекте есть несколько подмодулей, которые находятся внутри каталогов, вы можете вызвать make в make-файле подкаталога изнутри make для сборки каждого из них.
  • Если у вас действительно сложный проект, который нуждается в установочных скриптах и т.д.вероятно, вы также захотите изучить autotools, который генерирует makefile для вас и выполняет множество трюков для проверки существования библиотеки и других проблем с переносимостью.

" Управление проектами с помощью GNU Make, 3-е издание " находится под «GNU Free Documentation License». и можно легально читать онлайн бесплатно: ссылка .

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top