Расширение не было бы вообще, и файл называется Makefile, если вы хотите, чтобы GNU make автоматически находил его.
У Make есть автоматические переменные, которые дают вам контроль над большей частью процесса построения из файлов C/C++. Эти переменные включают CC
, CPP
, CFLAGS
, CPPFLAGS
, CXX
, CXXFLAGS
и LDFLAGS
. Они будут управлять коммутаторами в препроцессоре C/C++, компиляторе и объекте платформы и программном компоновщике (программа, которая генерирует так называемый «исполняемый файл программы», или в режиме plainspeak «программа, которую вы компилируете»).
GNU make также включает множество неявных правил, которые предназначены для создания программ из исходного кода C/C++, поэтому вам не нужно писать их с нуля.
Например, даже без также файл, если вы попытаетесь make foobar
, GNU Make попытается сначала построить foobar.o
из foobar.c
или foobar.cpp
, если он находит либо путем вызова соответствующего компилятора, а затем будет пытаться построить foobar
путем сборки (включая привязку) его частей от системных библиотек и foobar.o
. Короче говоря, GNU Make знает, как построить программу foobar
даже без присутствия make-файла - благодаря неявным правилам. Вы можете видеть эти правила, вызывая Make с помощью переключателя -p
, например. make -p
.
Некоторым людям нравится полагаться на GNU. Сделать неявную базу данных правил иметь скудные и короткие make-файлы, в которых указывается только конкретный для их проекта, в то время как некоторые люди могут зайти так далеко, чтобы отключить всю базу данных неявных правил (используя переключатель -r
) и имеют полный контроль над процессом строительства, указав все с нуля. Я не буду комментировать законность любой из этих стратегий, но будьте уверены, оба они работают в некоторой степени.