Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
main.o: main.cpp
g++ -c main.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
hello.o: hello.cpp
g++ -c hello.cpp.SUFFIXES: .cpp .o
.cpp.o:
$(CC) $(CFLAGS) -c -o $@ $<
Ровно до тех пор, пока не появится необходимость подключить проекту объектный модуль. Соответственно, для этого модуля не будет .cpp-файла.Только что создал файл x.c, вручную скомпилировал в z.o, и добавил z.o в список целей сборки одного моего личного проекта — собирается нормально, никаких проблем у make не возникло со сборкой. Я даже успешно вызвал из кода на D функцию из z.o.
Более того, может появится необходимость подключить один единственный файл .c и make тоже поломается.Опять же, никаких проблем:
.d.o:
$(D_COMPILER) $(D_COMPILER_FLAGS) -c -of$@ $<
.c.o:
$(CC) $(CFLAGS) -c -o $@ $<
В первом примере цель называется all. Это цель по умолчанию для мейкфайла, которая будет выполняться, если никакая другая цель не указана явно.Тут злостно нарушена причинно-следственная связь!
firsttarget:
echo "The first one is the default"
all:
echo "All is the default"
$ make
echo "The first one is the default"
The first one is the defaultall:
g++ main.cpp hello.cpp factorial.cpp -o hello
Makefile для самых маленьких