Наиболее часто используемые функции 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-файл и выполнят ряд трюков, чтобы проверить существование библиотеки и другие проблемы с переносимостью.