Чтобы ответить на то, что кажется вашим вопросом ... make будет искать только в текущем каталоге (хотя вы можете вызвать make с опцией "-f", чтобы указать make-файл, который не называется "Makefile" или расположенный в другом каталоге, вы также можете вызвать make с опцией "-C" для запуска в другом каталоге, и вы можете включить один make-файл (возможно, расположенный в другом месте - из другого make-файла); однако, чтобы ответить на более общий вопрос о том, нужно ли явно указывать все в вашем make-файле ...
Не все в Makefile нужно указывать явно. У Make есть несколько встроенных правил, которые позволяют ему строить вещи автоматически. Например, $ (CXX), компилятор C ++ определен по умолчанию, и Make может создать файл, который заканчивается на «.o», из файла с тем же именем, которое заканчивается на «.cpp» автоматически. Так, например:
program_NAME := myprogram
program_SRCS := $(wildcard *.cpp)
program_OBJS := ${program_SRCS:.cpp=.o}
$(program_NAME) : $(program_OBJS)
$(CXX) $(program_OBJS) -o $(program_NAME) $(CXXFLAGS) $(LDFLAGS)
Приведенного выше make-файла достаточно для сборки «myprogram», используя все файлы «.cpp» в текущем каталоге, и обратите внимание, что единственным явным шагом сборки является компоновка ... он использует правила автоматической сборки для компиляции.
Если вы хотите управлять различными флагами, вы можете добавить записи в CXXFLAGS и LDFLAGS, такие как:
CXXFLAGS += -I./include -DHAVE_UNISTD_H -Wall -pedantic
LDFLAGS += -L./thirdparty/libs -lm -lboost
Просто добавьте операторы перед правилами сборки. Тем не менее, я бы посоветовал вам взглянуть на систему сборки CMake , так как она намного проще, с большей вероятностью является переносной и труднее выстрелить себе в ногу. Несмотря на то, что можно создавать очень переносимые make-файлы, в Makefile также очень легко использовать элементы, зависящие от платформы и даже конфигурации, что делает CMake лучшим выбором системы сборки.
Если вы хотите узнать больше о CMake, вас может заинтересовать просмотр CMake Google Techtalk , чтение Почему KDE переключился на CMake , посещение CMake wiki и добавление в закладки CMake Manual . Вам также может быть интересно использовать шаблон проекта приложения C ++ и шаблон проекта библиотеки C ++ , оба из которых используют CMake и предоставляют вам простой для начала проект.
Если вы хотите узнать больше о Makefile, вас может заинтересовать мое руководство Как написать Makefile .