Я хочу использовать файл common.mk для определения общих переменных и включить этот файл в другие файлы Makefile, но в первом примере, который я сделал, он не работает, поэтому я думаю, что что-то неправильно понял.
Это Makefile:
CC=gcc
CFLAGS=-g -Wall
LIB_FLAGS=-L/usr/local/lib/ -lcgreen
BUILDDIR=$(CURDIR)/build
SRC=$(wildcard *.c)
export BUILDDIR
export CFLAGS
export LIB_FLAGS
#include common.mk # HERE I INCLUDE THE common.mk where OBJ is defined
unittests: dir externals $(OBJ)
@echo "SRC: $(SRC)"
@echo "OBJ: $(OBJ)" # THIS PRINTS OBJ AS EMPTY <------------------------------
$(CC) $(BUILDDIR)/*.o $(LIB_FLAGS) -o $(BUILDDIR)/unittests
$(BUILDDIR)/unittests
externals:
@$(MAKE) -C lib1 -f lib1.mk
dir:
mkdir -p $(BUILDDIR)
Это файл common.mk:
OBJ=$(patsubst %.c, $(BUILDDIR)/%.o, $(notdir $(SRC)))
$(BUILDDIR)/%.o: %.c
@echo "File: "$<
$(CC) -c $(CFLAGS) $< -o $@
clean:
rm -f $(OBJ)
Так что я ожидал, что переменная OBJ в основном Makefile имеет список объектных файлов, но он пуст, и я не понимаю, почему. Разве он не включает в себя файл common.mk и не копирует его содержимое в Makefile?
Спасибо