Ответ 1
(GNU) Make имеет встроенные правила, что приятно, потому что достаточно предоставить зависимости без правил:
main: main.o add.o
# no rule, therefore use built-in rule
Однако правило сборки в этом случае использует $(CC)
для связывания объектных файлов.
% make -p -f/dev/null
...
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
...
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
...
%: %.o
# recipe to execute (built-in):
$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o [email protected]
Чтобы Make выбрал правильный компоновщик, достаточно установить LINK.o
на LINK.cc
. Таким образом, минимальный Makefile
может выглядеть как
% cat Makefile
LINK.o = $(LINK.cc)
CXXFLAGS=-Wall -pedantic -std=c++0x
main: main.o add.o